c# Mysql创建新行,但如果存在,不要't

本文关键字:不要 存在 如果 Mysql 创建 新行 | 更新日期: 2023-09-27 18:03:39

我有一个mysql表,我的c#程序包括一些类似于登录/注册的东西。

我使用这个方法打开连接,关闭它和一些更多的东西:http://www.codeproject.com/Articles/43438/Connect-C-to-MySQL

public void Insert(string id,string ip)
        {
            string query = "INSERT INTO skinsdb (id, acces, ip) VALUES('" + id + "',  1 , '" + ip + "')";
            //open connection
            if (this.OpenConnection() == true)
            {
                //create command and assign the query and connection from the constructor
                MySqlCommand cmd = new MySqlCommand(query, connection);
                //Execute command
                cmd.ExecuteNonQuery();
                //close connection
                this.CloseConnection();
            }
            else MessageBox.Show("code 18");
        }

我只是使用这个新行,但我想如果"id"已经存在,只是增加1访问(int)他的行单元格。谢谢你。

c# Mysql创建新行,但如果存在,不要't

如果id上只有一个唯一的索引,那么可以使用

"INSERT INTO skinsdb (id, acces, ip) VALUES('" + id + "',  1 , '" + ip + "') 
ON DUPLICATE KEY UPDATE acces=acces+1";

您应该使用SQL参数。您可以通过以下查询实现您的目标:

    string query =
   "IF EXISTS (SELECT * FROM  skinsdb WHERE id=@id)
        UPDATE skinsdb SET acces=acces+1 WHERE id=@id
    ELSE
        INSERT INTO skinsdb (id, acces, ip) VALUES(@id,1,@ip)";
                //open connection
    if (this.OpenConnection() == true)
    {
       //create command and assign the query and connection from the constructor
     MySqlCommand cmd = new MySqlCommand(query, connection);
     cmd.Parameters.AddWithValue("@id",id);
     cmd.Parameters.AddWithValue("@ip",ip);
     //Execute command
     cmd.ExecuteNonQuery();
     //close connection
     this.CloseConnection();
     }