ASP.NET中的mysql参数化查询

ASP.NET中的mysql参数化查询,mysql,asp.net,parameterized-query,Mysql,Asp.net,Parameterized Query,我正在处理参数化查询,但没有得到正确的查询结果 这是我的密码 public MySqlCommand Get_Login(string clinetID, string loginID, string password, string branchID) { MySqlCommand objCommand = new MySqlCommand(this.Query); objCommand.Parameters.AddWithValue("@Cl

我正在处理参数化查询,但没有得到正确的查询结果

这是我的密码

   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'
我没有得到参数中的值

objCommand.Parameters.AddWithValue("?xLoginID", loginID);
这是一个问题

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";

问题在于参数是用单引号包装的,将其转换为字符串文字

要使其工作,请删除它们周围的单引号。例如

Where p.Active = 'Y' 
      and p.LoginId = @LoginID 
      and p.Pasword = @Password
      and p.BranchID = @BranchID

问题在于参数是用单引号包装的,将其转换为字符串文字

要使其工作,请删除它们周围的单引号。例如

Where p.Active = 'Y' 
      and p.LoginId = @LoginID 
      and p.Pasword = @Password
      and p.BranchID = @BranchID

“秘密松鼠”在使用上是正确的?对于参数化变量。MySQL在查询中使用@for内联sql变量,因此希望这些变量可以通过脚本或内联select子查询声明的一部分进行声明

您需要更改参数的两个实例。。。在查询中,以及作为命令.Parameters.Add。。。实例

另外,我注意到了,不确定是否是这样,但在WHERE子句中,你只有一个密码和两个密码,不知道是有意还是无意

最后一件可能有用的事。由于一些参数与列名匹配,我建议稍微更改参数,只需添加x之类的内容,以强制区分列名和实际参数

where... p.LoginID = ?xLoginID ...
和在命令参数中

objCommand.Parameters.AddWithValue("?xLoginID", loginID);

“秘密松鼠”在使用上是正确的?对于参数化变量。MySQL在查询中使用@for内联sql变量,因此希望这些变量可以通过脚本或内联select子查询声明的一部分进行声明

您需要更改参数的两个实例。。。在查询中,以及作为命令.Parameters.Add。。。实例

另外,我注意到了,不确定是否是这样,但在WHERE子句中,你只有一个密码和两个密码,不知道是有意还是无意

最后一件可能有用的事。由于一些参数与列名匹配,我建议稍微更改参数,只需添加x之类的内容,以强制区分列名和实际参数

where... p.LoginID = ?xLoginID ...
和在命令参数中

objCommand.Parameters.AddWithValue("?xLoginID", loginID);

这对他有什么帮助?p.Active='Y'和p.LoginId=@LoginId和p.Pasword=@Password和p.BranchID=@BranchID@SecretSquirrel你什么意思?这对他有什么帮助?尝试复制问题并尝试引用参数。让我们看看命令对象是否可以找到您的参数@今草顿웃 问题必须与输入有关,更改输出既没有帮助也没有用处。是的,很明显,SQL中的变量不应该包含在引号中。但问题是查询是如何生成的。这对他有什么帮助?p.Active='Y'和p.LoginId=@LoginId和p.Pasword=@Password和p.BranchID=@BranchID@SecretSquirrel你什么意思?这对他有什么帮助?尝试复制问题并尝试引用参数。让我们看看命令对象是否可以找到您的参数@今草顿웃 问题必须与输入有关,更改输出既没有帮助也没有用处。是的,很明显,SQL中的变量不应该包含在引号中。但问题是查询是如何生成的。为此声明了什么。查询?公共字符串查询{get{return StrQuery;}set{StrQuery=value;}}它基本上是从另一个类中获取查询,而不是在这个类中向command对象添加参数:我的意思是填充该propertyok的查询是什么,检查原因是因为您使用了错误的MySQL标识符?不是为这个.Query声明的@what?公共字符串查询{get{return StrQuery;}set{StrQuery=value;}}它基本上是从另一个类获取查询,而不是向这个类中的命令对象添加参数:我的意思是填充该属性的查询是什么,检查原因是因为您使用了错误的MySQL标识符吗?不是@