从数据库更新数据

时间:2016-06-16 22:08:06

标签: c# mysql database sql-update

我正在尝试更新数据库中的某些数据,但我在代码中遇到问题......它似乎没有错误,但它没有更新。

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)
            {

            }
        }

1 个答案:

答案 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中的每条记录。这总是一个错误,但我没有关于你想要更新的记录的线索。