mysql数据库更新错误

本文关键字:错误 更新 数据库 mysql | 更新日期: 2023-09-27 18:11:38

我试图更新我的mysql数据库,但它没有工作,并显示我的错误。

代码:
string constring = "datasource=localhost;port=3306;username=root;password=root";
string Query = "update  database.check set  namethestore = '" + this.textBox65.Text + "' , checkername= '" + this.textBox66.Text + "' ,  where namethestore = '" + this.textBox65.Text + "'  ;";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
MySqlDataReader myReader;
try
{
   conDataBase.Open();
   myReader = cmdDataBase.ExecuteReader();
   MessageBox.Show("saved");
   while (myReader.Read())
   {
   }

mysql数据库更新错误

这段代码有很多错误。

  1. 你应该使用ExecuteNonQuery来更新语句
  2. 必须使用参数化查询来保护代码不受SQL注入的攻击
  3. 正如拉胡尔所说,你有一个额外的,
  4. 我想知道你是否在最后关闭连接。

WHERE条件之前的UPDATE语句中有一个额外的,,如下所示

update  database.check set  namethestore = '" + this.textBox65.Text + "' , 
checkername= '" + this.textBox66.Text + "' ,  where ...;
                                           <--Here

正如其他人已经评论的那样,您的代码容易受到SQL注入的攻击。请尝试使用参数化查询。

另外,由于您正在执行DML操作,因此不需要DataReader。您可以使用ExecuteNonQueryExecuteScalar

供参考:

string constring = "datasource=localhost;port=3306;username=root;password=root";
string Query = "update  database.check set  namethestore = 
@namethestore,checkername=@checkername where namethestore = @namethestore";
using(MySqlConnection conDataBase = new MySqlConnection(constring))
{
  using(MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase))
   {
     conDataBase.Open();
     cmdDataBase.CommandText = Query;
     cmdDataBase.Parameters.Add("@namethestore", this.textBox65.Text);
     cmdDataBase.Parameters.Add("@checkername", this.textBox66.Text);
     cmdDataBase.ExecuteNonQuery();
   }
}

ExecuteReader返回包含MySqlCommand结果的MySqlDataReader。由于您使用INSERT语句,因此您的语句没有返回数据。你的语句只是从数据库中插入一个值。

这就是为什么你应该使用ExecuteNonQuery。它只执行您的语句,对于INSERT语句,它返回受影响的行数。

您应该始终使用参数化查询。这种字符串连接容易受到SQL注入攻击。

还可以使用using语句来处理数据库连接。

WHERE条件之前有一个额外的逗号(,)。

using(MySqlConnection conn = new MySqlConnection(constring))
using(MySqlCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "update database.check set namethestore = @namethestore, checkername= @checkername where namethestore = @namethestore";
    cmd.Parameters.AddWithValue(@namethestore, this.textBox66.Text);
    cmd.Parameters.AddWithValue(@checkername, this.textBox65.Text);
    conn.Open()
    if(cmd.ExecuteNonQuery() > 0)
       MessageBox.Show("saved");
}

我在我的例子中使用AddWithValue,因为我不知道你的列类型,但你不使用它。使用SqlParameterCollection.Add方法代替。

阅读http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/