Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将参数传递给MySQL OdbcCommand,以及仅当谓词匹配时如何更新? 问题1-如何正确地将参数传递给MySQL odbc命令?_C#_Mysql_Odbc - Fatal编程技术网

C# 如何将参数传递给MySQL OdbcCommand,以及仅当谓词匹配时如何更新? 问题1-如何正确地将参数传递给MySQL odbc命令?

C# 如何将参数传递给MySQL OdbcCommand,以及仅当谓词匹配时如何更新? 问题1-如何正确地将参数传递给MySQL odbc命令?,c#,mysql,odbc,C#,Mysql,Odbc,我是MYSQL新手 我想写更新查询。我已经这样写了,但它不工作 private int UpdateUser(ClsUserRegistrationProp ObjUserProp, int IntUesrId) { Int32 Isdone; using (OdbcConnection con = new OdbcConnection(ConnStr)) using (OdbcCommand cmd = new OdbcCommand("UPDATE tblUsers

我是MYSQL新手

我想写更新查询。我已经这样写了,但它不工作

private int UpdateUser(ClsUserRegistrationProp ObjUserProp, int IntUesrId)
{
    Int32 Isdone;
    using (OdbcConnection con = new OdbcConnection(ConnStr))
    using (OdbcCommand cmd = new OdbcCommand("UPDATE tblUsers SET FirstName = ?, LastName = ?,UserName = ?,Password = ?,EmailId = ? where UserId= ?", con))
    {
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = 0;

        cmd.Parameters.Add("@UserId", OdbcType.Int).Value = IntUesrId;
        cmd.Parameters.Add("@FirstName", OdbcType.VarChar, 255).Value = ObjUserProp.FirstName;
        cmd.Parameters.Add("@LastName", OdbcType.VarChar, 255).Value = ObjUserProp.LastName;
        cmd.Parameters.Add("@UserName", OdbcType.VarChar, 255).Value = ObjUserProp.UserName;
        cmd.Parameters.Add("@Password", OdbcType.VarChar, 255).Value = ObjUserProp.Password;
        cmd.Parameters.Add("@EmailId", OdbcType.VarChar, 255).Value = ObjUserProp.EmailId;

        con.Open();

        Isdone=cmd.ExecuteNonQuery();            
        con.Close();
        return Isdone;




    }
}
问题2-如何仅在用户名或电子邮件匹配时更新记录? 此外,我想检查用户名和电子邮件是否已经存在。如果它们不存在,只有这样记录才会更新

我该怎么做?请帮助

参数 如果使用ODBC,则必须将变量命名为@xyz,因此

UPDATE tblUsers SET FirstName = @FirstName, ... WHERE xyz
并添加如下参数

cmd.Parameters.Add("@FirstName", ...)
为了完整起见,如果您使用MySQL连接器,SQL应该读取

UPDATE tblUsers SET FirstName = ?FirstName, ... WHERE xyz
并添加不带“?”的参数

cmd.Parameters.Add("FirstName", ...)
用户名,电子邮件检查 基本方法是对用户名和/或电子邮件进行选择,然后仅在没有返回结果时进行更新,但您可以在一条语句中这样做:

UPDATE tblUsers SET ... WHERE UserId= @userId AND Email = @Email AND UserName = @UserName
因此,只有当电子邮件和用户名与传递到参数中的相同时,更新才会起作用

然后,您可以使用ExecuteNonQuery中的int来检查记录是否已更改结果>0或无更改结果=0。如果没有更改,则电子邮件和用户名不匹配。警告:如果您输入了错误的用户id,这也将返回result=0

嗯 Alex

参数 如果使用ODBC,则必须将变量命名为@xyz,因此

UPDATE tblUsers SET FirstName = @FirstName, ... WHERE xyz
并添加如下参数

cmd.Parameters.Add("@FirstName", ...)
为了完整起见,如果您使用MySQL连接器,SQL应该读取

UPDATE tblUsers SET FirstName = ?FirstName, ... WHERE xyz
并添加不带“?”的参数

cmd.Parameters.Add("FirstName", ...)
用户名,电子邮件检查 基本方法是对用户名和/或电子邮件进行选择,然后仅在没有返回结果时进行更新,但您可以在一条语句中这样做:

UPDATE tblUsers SET ... WHERE UserId= @userId AND Email = @Email AND UserName = @UserName
因此,只有当电子邮件和用户名与传递到参数中的相同时,更新才会起作用

然后,您可以使用ExecuteNonQuery中的int来检查记录是否已更改结果>0或无更改结果=0。如果没有更改,则电子邮件和用户名不匹配。警告:如果您输入了错误的用户id,这也将返回result=0


Alex你需要像这样的东西吗

UPDATE tblUsers 
SET FirstName = @Firstname, LastName = @LastName,UserName = @UserName,Password = @Password,EmailId = @EmailId
WHERE UserId= @userId AND NOT EXISTS (
    SELECT * FROM tblUsers WHERE UserName=@UserName AND EmailId=@EmailId 
 )

您需要类似于:

UPDATE tblUsers 
SET FirstName = @Firstname, LastName = @LastName,UserName = @UserName,Password = @Password,EmailId = @EmailId
WHERE UserId= @userId AND NOT EXISTS (
    SELECT * FROM tblUsers WHERE UserName=@UserName AND EmailId=@EmailId 
 )