如何将参数传递给MySQL OdbcCommand以及仅在谓词匹配时如何更新?

时间:2011-11-02 06:32:03

标签: c# mysql odbc

问题1 - 如何正确地将参数传递给MySQL OdbcCommand?

我是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 - 如果用户名或电子邮件匹配,我如何才更新记录?

另外我想检查用户名和电子邮件是否已经存在。如果它们不存在那么只有记录会更新

我该怎么做?请帮忙...... !!!

2 个答案:

答案 0 :(得分:0)

参数

如果使用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", ...)

用户名,电子邮件检查

基本方法是为用户名和/或电子邮件执行SELECT,然后只在没有返回结果的情况下进行更新,但是您可以在一个语句中执行此操作:

UPDATE tblUsers SET ... WHERE UserId= @userId AND Email = @Email AND UserName = @UserName

因此,只有当电子邮件和用户名与您传入参数时相同时,更新才会有效。

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

HTH 亚历

答案 1 :(得分:0)

你需要这样的东西:

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 
 )