如何将参数传递给MySQL OdbcCommand,以及如何仅在谓词匹配时更新
本文关键字:何仅 谓词 更新 参数传递 OdbcCommand MySQL | 更新日期: 2023-09-27 18:13:29
问题1 -如何正确传递参数到MySQL OdbcCommand?
I am new to 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来检查记录是否被更改(result>0)或没有更改(result = 0)。如果没有更改,则电子邮件和用户名不匹配。(警告:如果您传入错误的用户id,这也将返回result = 0!)
HTH亚历克斯
您是否需要以下内容:
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
)