我正在尝试使用条件执行查询,如果用户名已经存在,则更新行,否则插入用户名和密码。
这是我的代码:
using (SqlCommand cmd = new SqlCommand("INSERT INTO Users(Username,Password) VALUES(@User,@password) ON DUPLICATE KEY UPDATE Username=VALUES(Username), Password=VALUES(Password)"))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@User", TextBox3.Text);
cmd.Parameters.AddWithValue("@password", Pwd);
con.Open();
cmd.ExecuteNonQuery();
}
我收到以下错误:
关键字' ON'附近的语法不正确。
我无法弄清楚这有什么问题。有人可以帮帮我吗?
答案 0 :(得分:2)
在SQL Server中,您需要使用如下所示的查询:
-- check if exists (by username) - if found, update password
IF EXISTS (SELECT * FROM dbo.Users WHERE Username = @User)
UPDATE dbo.Users
SET Password = @password
WHERE Username = @User
ELSE
INSERT INTO dbo.Users(Username, Password)
VALUES(@User, @password)
正如我的评论中提到的那样,不使用.AddWithValue
函数(有关详细信息,请参阅链接的博文),但请改用:
cmd.Parameters.Add("@User", SqlDbType.VarChar, 100).Value = TextBox3.Text;
另外,请 不要 将您的密码存储在数据库中的 明文 中!
答案 1 :(得分:1)
看起来你正在使用MySQL语法。我不认为SQL Server有ON DUPLICATE KEY。您可能需要MERGE statement。
答案 2 :(得分:0)
@marc_s
String query = @"IF EXISTS (SELECT * FROM Users WHERE Username = @ User)
UPDATE Users
SET Password = @password
WHERE Username = @ User
ELSE
INSERT INTO Users(Username, Password)
VALUES(@ User, @password)";
using (SqlCommand cmd = new SqlCommand(query))
我使用了您提供的代码并用于调试点以检查代码是否正在执行,而且它仍然没有更新或插入值。我无法在SQL服务器中运行查询导致每次打开查询窗口VSudio重启,我正在使用Visual Studio的试用版