问题 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 - 如何仅在用户名或电子邮件匹配时更新记录?
我还想检查用户名和电子邮件是否已经存在。如果它们不存在,那么记录才会更新
我该怎么做?请帮忙...!!!
最佳答案
参数
如果你使用 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,这也会返回结果 = 0!)
HTH 亚历克斯
关于c# - 如何将参数传递给 MySQL OdbcCommand 并且仅当谓词匹配时如何更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7976584/