【问题标题】:Why my Update sql Command don't work?为什么我的更新 sql 命令不起作用?
【发布时间】:2012-12-03 13:14:31
【问题描述】:

我在 mysql 中的 sql 命令有问题。我有一个 asp.net 应用程序并使用 mysql 数据库作为数据库。我想构建一个可以插入、更新、删除和选择数据库中记录的类。我有更新命令的问题。在 phpmyadmin 中它可以工作,但在我的课堂上不是:/

这是我的代码

public void UpdateRecord(string title, string firstname, string lastname, string company,
                               string timefrom, string timeto)
        {
            connection = new MySqlConnection();

            try
            {
                MySqlCommand command = connection.CreateCommand();

                //for testing
                string sql = "UPDATE 'tb_gast' SET FIRSTNAME='test' WHERE ID=270";

                command.CommandText = sql;

                connection.Open();

                command.ExecuteNonQuery();

            }
            catch (Exception)
            {

            }
            finally
            {
                connection.Close();
            }
        }

此命令在 phpmyadmin 中工作

UPDATE `tb_gast` 
SET 
FIRSTNAME='uu',
LASTNAME='uu',
COMPANY='uu'
WHERE ID=270

【问题讨论】:

  • 我不确定(关于 MySQL),但尝试删除表名周围的单引号,例如。更新 tb_gast 集...
  • 如果您删除那个空的Catch(Exception){} 块并让错误真正得到报告,那么所有“它不起作用”的 cmets 都会被更快地解决。然后,当你解决了问题......不要添加回来。因为,下次出现问题时,您还想知道实际的错误是什么,而不是让这个函数默默地失败。
  • 在 catch 块中添加一个 MessageBox (Exception ex) -> ex.Message // 打印此消息并告诉我们错误
  • @Sunny - 这种方法的问题是(对于未知异常)您可能仍然没有提供足够的信息(例如,您正在丢弃内部异常和堆栈跟踪)。如果您不知道实际错误是什么,最好让异常逃逸并导致严重的丑陋崩溃(充满丰富的信息)。

标签: c# asp.net mysql sql database


【解决方案1】:

删除表名'tb_gast' 中的引号。而不是:

UPDATE 'tb_gast' SET FIRSTNAME='test' WHERE ID=270

试试这个:

UPDATE tb_gast SET FIRSTNAME = 'test' WHERE ID=270

【讨论】:

  • 这也不行 :( ...我不明白语法必须正确的问题出在哪里 :/
  • 我没有收到错误...但是我在数据库中看到了不起作用:/
【解决方案2】:

您在表名周围使用单引号,而不是反引号。
可以使用组合键ALT+096 输入反引号

UPDATE `tb_gast` SET FIRSTNAME = 'test' WHERE ID=270

编辑:更深入地研究您的问题。
注意到您声明了一个 MySqlConnection 并在没有任何连接字符串的情况下对其进行了初始化。
如果这是您的真实代码,难怪它不起作用

你的代码应该是这样的

        using(connection = new MySqlConnection(GetConnectionString())
        {
            connection.Open();
            using(MySqlCommand command = connection.CreateCommand();
            {
                //for testing
                string sql = "UPDATE `tb_gast` SET FIRSTNAME='test' WHERE ID=270";
                command.CommandText = sql;
                command.ExecuteNonQuery();
            }
        }

GetConnectionString() 应该是某种从配置文件等永久存储中返回连接字符串的方法

【讨论】:

    【解决方案3】:

    试试这个...

    void UpdateRecord(string title, string firstname, string lastname, string company, 字符串时间从,字符串时间到) { 连接 = 新的 MySqlConnection();

            try
            {
               string sql = "UPDATE tb_gast SET FIRSTNAME='test' WHERE ID=270";
               MySqlCommand command = new MySqlCommand(sql, connection);
               connection.Open();
    
                command.ExecuteNonQuery();
    
            }
            catch (Exception)
            {
    
            }
            finally
            {
                connection.Close();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2017-11-26
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多