繁体   English   中英

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

[英]Error while executing query in C#, SQL Server: trying to update if value already present else insert

我试图执行一个条件,如果用户名已经存在,然后更新行,否则插入用户名和密码。

这是我的代码如下:

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

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

在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;

另外,请不要将密码以明文形式存储在数据库中!

看起来你正在使用MySQL语法。 我认为SQL Server没有ON DUPLICATE KEY。 你可能想要一个MERGE语句

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM