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())
{
}
这段代码有很多错误。
- 你应该使用ExecuteNonQuery来更新语句
- 必须使用参数化查询来保护代码不受SQL注入的攻击
- 正如拉胡尔所说,你有一个额外的,
- 我想知道你是否在最后关闭连接。
在WHERE
条件之前的UPDATE
语句中有一个额外的,
,如下所示
update database.check set namethestore = '" + this.textBox65.Text + "' ,
checkername= '" + this.textBox66.Text + "' , where ...;
<--Here
正如其他人已经评论的那样,您的代码容易受到SQL注入的攻击。请尝试使用参数化查询。
另外,由于您正在执行DML操作,因此不需要DataReader
。您可以使用ExecuteNonQuery
或ExecuteScalar
。
供参考:
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/