我正在尝试更新数据库中的某些数据,但我在代码中遇到问题......它似乎没有错误,但它没有更新。
conexiune 是我的连接器类 cheltuieli 是我在数据库中的表,其余的名称是列
错误在这一行: command.ExecuteNonQuery(); ,当我点击按钮时出现错误 错误: MySql.Data.dll中出现“MySql.Data.MySqlClient.MySqlException”类型的第一次机会异常
其他信息:您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在“35”附近使用正确的语法,在第1行使用DistractieCultura'20',Neprevazute'30'
我不知道为什么......有什么想法?
private void button5_Click(object sender, EventArgs e)
{
try
{
if (textBox1.Text != "" & textBox2.Text != "" & textBox3.Text != "" & textBox4.Text != "" & textBox5.Text != "" & textBox6.Text != "")
{
MySqlConnection conexiune = null;
conexiune = Conector.getConnection();
MySqlCommand command = new MySqlCommand();
command.Connection = conexiune;
command.CommandText = "Update cheltuieli set Mancare = '" + textBox1.Text + "', Facturi = '" + textBox2.Text + "', Reparatii = '" + textBox3.Text + "', Altele '" + textBox4.Text + "', DistractieCultura '" + textBox5.Text + "', Neprevazute '" + textBox6.Text + "'";
command.ExecuteNonQuery();
MessageBox.Show("Actualizat!");
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
textBox6.Clear();
Search();
}
}
catch (Exception ex)
{
}
}
答案 0 :(得分:3)
您要更新的每个字段后面都应跟有symbol =然后是值。您的查询仅在第一个字段
之后具有符号 UPDATE table SET Field1='Value1', Field2='Value2' .....
说,你应该立即抛弃这段代码并开始使用参数化查询。使用字符串连接,就像您现在所做的那样,您的代码可能会被使用Sql注入攻击,或者您可能会遇到由值中的单引号引起的语法错误
参数化查询的一个例子是
string cmdText = @"Update cheltuieli set Mancare = @mancare,
Facturi = @facturi,Reparatii = @reparatii, Altele=@altele,
DistractieCultura = @distractieCultura,
Neprevazute=@neprevazute";
using(MySqlConnection conexiune = Conector.getConnection())
using(MySqlCommand command = new MySqlCommand(cmdText, conexiune))
{
conexiune.Open();
command.Parameters.Add("@mancare", MySqlDbType.VarChar).Value = textBox1.Text;
command.Parameters.Add("@facturi", MySqlDbType.VarChar).Value = textBox2.Text;
... and so on for the other parameters ....
command.ExecuteNonQuery();
}
请注意,您的查询没有WHERE语句,因此此查询使用相同的值更新表cheltuieli中的每条记录。这总是一个错误,但我没有关于你想要更新的记录的线索。