我是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;
}
}
另外我想检查用户名和电子邮件是否已经存在。如果它们不存在那么只有记录会更新
我该怎么做?请帮忙...... !!!
答案 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
)