1

MySql テーブルを更新するためにいくつかの C# を作成しましたが、メソッド ExecuteNonQuery() を呼び出すたびに例外が発生します。これを Web で調査しましたが、見つけたすべてのソリューションで同じエラーが発生します。データベースへのオープン接続があり、データベースへの更新クエリが正しく記述されています。私がこれまでに思いついたコードは次のとおりです。

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");
}
4

2 に答える 2

4

try セクションを以下のコードに変更します。

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 セクションを離れると暗黙的に閉じられて破棄されます。

于 2012-04-25T21:10:48.353 に答える
3

接続が開かれていません

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();
}
于 2012-04-25T20:56:35.197 に答える