【问题标题】:update a mySQL table using C#使用 C# 更新 mySQL 表
【发布时间】:2012-04-25 20:45:57
【问题描述】:

我编写了一些 C# 来更新 MySql 表,但每次调用 ExecuteNonQuery() 方法时都会出现异常。我在网上对此进行了研究,发现的每个解决方案都会产生相同的错误。我有一个与数据库的开放连接,并且对数据库的更新查询已正确写入。到目前为止我想出的代码是:

public int executeUpdate()
{
  int result = 0;
  if (isConnected)
  {
    try
    {
      MySqlConnection cn = new  MySqlConnection(connection.ConnectionString);
      MySqlCommand cmd = new MySqlCommand();

      cmd.Connection = cn; 
      cmd.CommandText = "UPDATE test SET status_id = 1 WHERE test_id = 1";
      int numRowsUpdated = cmd.ExecuteNonQuery(); 
    }
    catch (MySqlException exSql)
    {
      Console.Error.WriteLine("Error - SafeMySql: SQL Exception: " + query);
      Console.Error.WriteLine(exSql.StackTrace);
    }
    catch (Exception ex)
    {
      Console.Error.WriteLine("Error - SafeMySql: Exception: " + query);
      Console.Error.WriteLine(ex.StackTrace);
    }
  }
  else
    Console.Error.WriteLine("Error - SafeMySql: executeQuery failed. Not connected to DB");
}

【问题讨论】:

    标签: c# mysql


    【解决方案1】:

    将您的尝试部分更改为以下代码:

    try
    {
        using(MySqlConnection cn = new  MySqlConnection(connection.ConnectionString))
        {        
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = cn; 
            cmd.CommandText = "UPDATE test SET status_id = 1 WHERE test_id = 1";
            cn.Open();
            int numRowsUpdated = cmd.ExecuteNonQuery();
            cmd.Dispose(); 
         }
    }
    

    在执行命令之前必须打开连接。在上面的示例中,命令对象将立即被释放,而连接对象将在您离开 using 部分时隐式关闭和释放。

    【讨论】:

    • 感谢大家的帖子,非常感谢。我已将我的代码更改为 Espen Burud 建议的代码,但代码仍然抛出异常,异常是: '{"Access denied for user 'root'@'localhost' (using password: NO)"}' 。当我通过 cn.Open(); 时引发此异常;线。再次,我玩得很好,在网上看,但找不到解决方案。任何帮助将不胜感激,谢谢
    • 很多情况都会导致访问被拒绝错误,所以我认为这个dev.mysql.com/doc/refman/5.1/en/access-denied.html页面可能会有所帮助。
    • @user498213 这个问题不是关于访问问题的。你应该根据你的问题选择一个答案。
    【解决方案2】:

    我没有看到正在打开的连接

    这是来自MSDN 的示例:即使在 using 块内,它们也会显式打开连接

    private static void CreateCommand(string queryString,
        string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(
                   connectionString))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
    }
    

    编辑MySQL 的原理与 SQL Server 相同:

    public void CreateMySqlCommand(string myExecuteQuery, MySqlConnection myConnection) 
    {
      MySqlCommand myCommand = new MySqlCommand(myExecuteQuery, myConnection);
      myCommand.Connection.Open();
      myCommand.ExecuteNonQuery();
      myConnection.Close();
    }
    

    【讨论】:

    • 是mysql而不是MSSQL。
    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多