在C#,SQL Server中执行查询时出错:尝试更新已存在的值,否则插入

时间:2015-02-13 16:59:28

标签: c# sql-server

我正在尝试使用条件执行查询,如果用户名已经存在,则更新行,否则插入用户名和密码。

这是我的代码:

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'附近的语法不正确。

我无法弄清楚这有什么问题。有人可以帮帮我吗?

3 个答案:

答案 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的试用版