параметризованный запрос mysql в ASP.NET

я работаю над параметризованными запросами, но я не получаю правильный запрос в результате

вот мой код

   public MySqlCommand Get_Login(string clinetID, string loginID, string password, string branchID)
    {
        MySqlCommand objCommand = new MySqlCommand(this.Query);


        objCommand.Parameters.AddWithValue("@ClientID", clinetID);
        objCommand.Parameters.AddWithValue("@LoginID", loginID);
        objCommand.Parameters.AddWithValue("@Password", password);
        objCommand.Parameters.AddWithValue("@BranchID", branchID);

        objCommand.CommandType = CommandType.Text;
        return objCommand;
    }

и при отладке это то, что я получаю в "objCommand"

 Select u.groupid,p.PersonId, p.designationid,concat(p.salutation,p.FName,'
',p.MName,' ',p.LName) as PersonName,tb.Type
 BrType,p.OrgId,p.subdepartmentid,ifnull(crossdept,'N') as
 crossdept,p.departmentid,u.defaultpage,p.orgid,ifnull(p.crosslab,'N') as crosslab,
 (select indoor_services from dc_Tp_organization where orgid='@ClientID') as
 indoor_services,(select name from dc_Tp_organization where orgid='@ClientID') as 
 orgname,
 (select default_route from dc_Tp_organization where orgid='@ClientID') as
 default_route,p.BranchID BranchID,tb.Name BRName from dc_tp_personnel p left outer
  join
 dc_tu_userright u on u.personid=p.personid left outer join dc_tp_branch tb on
 tb.BranchID=p.BranchID Where p.Active='Y' and p.LoginId = '@LoginID' and p.Pasword
  ='@Password' and p.BranchID='@BranchID'

я не получаю значения в параметрах

Вот запрос

objdbhims.Query = "Select u.groupid,p.PersonId,
p.designationid,concat(p.salutation,p.FName,' ',p.MName,' ',p.LName) as 
PersonName,tb.Type BrType,p.OrgId,p.subdepartmentid,ifnull(crossdept,'N') as 
crossdept,p.departmentid,u.defaultpage,p.orgid,ifnull(p.crosslab,'N') as crosslab,
(select indoor_services from dc_Tp_organization where orgid=@ClientID) as
indoor_services,(select name from dc_Tp_organization where orgid=@ClientID) as
orgname,(select default_route from dc_Tp_organization where orgid=@ClientID) as
 default_route,p.BranchID BranchID,tb.Name BRName from dc_tp_personnel p left outer
join dc_tu_userright u on u.personid=p.personid left outer join dc_tp_branch tb on
tb.BranchID=p.BranchID Where p.Active='Y' and p.LoginId = @LoginID and p.Pasword
=@Password and p.BranchID=@BranchID";

person Addy    schedule 11.12.2013    source источник
comment
что заявлено для this.Query?   -  person Secret Squirrel    schedule 11.12.2013
comment
общедоступная строка Query { получить { return StrQuery; } установить { StrQuery = значение; } }   -  person Addy    schedule 11.12.2013
comment
в основном он получает запрос из другого класса, а не добавляет параметры к объекту команды в этом классе.   -  person Addy    schedule 11.12.2013
comment
:) Я имел в виду, какой запрос заполняет это свойство   -  person Secret Squirrel    schedule 11.12.2013
comment
@Secret Squirre: добавлено в вопрос   -  person Addy    schedule 11.12.2013
comment
хорошо, проверьте эту ссылку, причина в том, что вы использовали неправильный идентификатор для MySQL должен быть ?, а не @   -  person Secret Squirrel    schedule 11.12.2013
comment
@секретная белка. спасибо, это сработало, я сначала не мог понять это правильно ... :)   -  person Addy    schedule 12.12.2013


Ответы (2)


Secret Squirrel правильно использовала «?» для параметризованных переменных. MySQL использует «@» для встроенных переменных sql для запросов и, таким образом, ожидает, что они будут объявлены, например, из сценария или части встроенного объявления (выберите подзапрос).

Вам нужно изменить ОБА экземпляра параметров... как в запросе, так и в виде команды.Параметры.Добавить... экземпляры.

Кроме того, я заметил и не уверен, так это или нет, но в вашем предложении WHERE у вас есть «пароль» (только один «s») против пароля (два «s»). Не знаю, намеренно или нет.

ПОСЛЕДНЯЯ вещь, которая МОЖЕТ помочь. Поскольку некоторые параметры соответствуют именам столбцов, я бы предложил НЕМНОГО изменить параметры, просто добавив что-то вроде «x», чтобы ПРИНУДИТЕЛЬНО различать имя столбца и фактические параметры...

where... p.LoginID = ?xLoginID ...

и в параметрах команды

objCommand.Parameters.AddWithValue("?xLoginID", loginID);
person DRapp    schedule 11.12.2013

Проблема в том, что параметры были заключены в одинарные кавычки, превращая их в строковые литералы.

Чтобы заставить его работать, удалите одинарные кавычки вокруг них. например.

Where p.Active = 'Y' 
      and p.LoginId = @LoginID 
      and p.Pasword = @Password
      and p.BranchID = @BranchID
person John Woo    schedule 11.12.2013
comment
чем это ему поможет? - person Secret Squirrel; 11.12.2013
comment
p.Active='Y' и p.LoginId = @LoginID и p.Pasword =@Password и p.BranchID=@BranchID - person Addy; 11.12.2013
comment
@SecretSquirrel, что ты имеешь в виду, как это ему помогает? попробуйте воспроизвести проблему и попробуйте указать параметры. давайте, если объект Command может найти ваши параметры. - person John Woo; 11.12.2013
comment
@ 今草顿웃 Проблема должна быть связана с вводом, изменение вывода не является ни полезным, ни полезным. Да, очевидно, что переменные внутри SQL не должны заключаться в кавычки. Но проблема в том, как был сгенерирован запрос. - person Secret Squirrel; 11.12.2013