【问题标题】:Update datas from database从数据库更新数据
【发布时间】:2016-06-16 22:08:05
【问题描述】:

我正在尝试更新数据库中的一些数据,但我的代码有问题...看起来没有错误,但没有更新。

conexiune 是我的连接器类 cheltuieli 是我在数据库中的表,其余名称是列

错误在这一行:command.ExecuteNonQuery(); 当我点击按钮时出现错误 错误: MySql.Data.dll 中发生了“MySql.Data.MySqlClient.MySqlException”类型的第一次机会异常

附加信息:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“35”、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)
            {

            }
        }

【问题讨论】:

  • 将您的查询放在一个字符串中并打印或记录它以检查查询是否格式正确。如果可能,还可以在替换参数后提供该示例查询。
  • About 12,700 questions on Stackoverflow 与此错误消息有关。答案几乎总是相同的 - 使用 SQL 参数。

标签: c# mysql database sql-update


【解决方案1】:

您要更新的每个字段都应后跟符号 =,然后是值。您的查询仅在第一个字段之后有符号

 UPDATE table SET Field1='Value1', Field2='Value2' .....

也就是说,您应该立即放弃此代码并开始使用参数化查询。使用字符串连接,就像您现在所做的那样,您的代码可能会被 Sql Injection 攻击,或者您可能会面临由值中的单引号引起的语法错误

参数化查询的一个例子是

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 表中存在的每条记录。这总是一个错误,但我不知道您要更新什么记录。

【讨论】:

  • 我尝试了你的代码,但错误仍然在完全相同的行 command.ExecuteNonQuery(); 这个程序应该能够添加、删除、更新和查看费用和在 add 方法中,我使用了 command.executenonquery 并且它可以工作,现在每次我使用它时都会完全出错。这些值只是数字,它们是从列表框中更新的,其中数据库中的数据按类别列出
  • 附加信息:键“PRIMARY”的重复条目“5”
  • 我是初学者,这只是学校的事情,我正在努力解决我遇到的这个错误......使用更新方法和删除方法......
  • 这是一个不同的错误。该表有一个主键,这意味着该字段中没有任何行可以具有相同的值。
  • PrimaryKeys 是包含唯一值的列,用于标识表中存在的记录集之间的特定记录。您不能有两条 PrimaryKey 字段包含相同值的记录。你知道什么是 PrimaryKey 字段吗?
猜你喜欢
  • 2011-02-10
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
相关资源
最近更新 更多