C# 更新mysql数据库会导致错误

C# 更新mysql数据库会导致错误,c#,mysql,C#,Mysql,我试图更新我的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 + "'

我试图更新我的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())
   {
   }

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

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

                                           <--Here

这段代码有很多错误

  • 您应该使用ExecuteOnQuery来更新语句
  • 必须使用参数化查询来保护代码不受SQL注入的影响
  • 正如拉胡尔所说,你有一个额外的
  • 我想知道你是否正在结束连接
  • 返回一个
    MySqlDataReader
    ,其中包含
    MySqlCommand
    的结果。由于使用了
    INSERT
    语句,因此语句中没有返回的数据。您的语句只是从数据库中插入一个值

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

    你应该经常使用。这种类型的字符串连接对攻击是开放的

    还可用于处理数据库连接

    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
    ,因为我不知道您的列类型,但您不使用它。改用它


    阅读

    您遇到了什么错误?您将面临SQL注入。看看这个:@user3806048您构建了一个
    UPDATE
    语句,然后尝试阅读该语句。我认为您应该使用
    ExecuteNonQuery()
    方法。您所说的@namethstore是什么意思,您的意思是像texbox1.txt这样的文本框的名称吗?@user3806048这些是您的值的占位符。@user3806048,不,这些是保存文本框值的参数。将这些参数传递给SQL查询。这避免了SQL注入攻击。在MSDN中阅读更多内容。我按照您的要求做了,但我仍然会出错,我的代码是:string Query=“update database.check set namethestore=”+this.textBox65.Text+”,checkername=“+this.textBox66.Text+”,where namethestore=”“+this.textBox65.Text+”:”;using(MySqlConnection conDataBase=new MySqlConnection(consting)){using(MySqlCommand cmdDataBase=new MySqlCommand(Query,conDataBase)){conDataBase.Open();cmdDataBase.CommandText=Query;cmdDataBase.Parameters.Add(“+this.textBox65.Text+”,this.textBox65.Text”);cmdDataBase.Parameters.Add(“+this.textBox66.Text+”,this.textBox66.Text);cmdDataBase.ExecuteNonQuery();}
    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");
    }