0

マルチスレッド SDK と対話する C# を使用してデータベース クラスを作成しています。私は 1 つの接続のみを使用する必要があります (言う必要はありません!) ただし、常に接続と datareadersに関するエラーが発生します。助けていただければ幸いです。

ここに私のコードの構造があります

static class Db
{
  static MySqlConnection conn = new MySqlConnection(connectionString);

  private static void Connect()
  {
    if (conn.State == ConnectionState.Closed)
                    conn.Open();
  }

   private static void DisConnect()
   {
     if (conn.State == ConnectionState.Open)
     conn.Close();
    }  


    static int Insert()
    {
        Connect();
        MySqlCommand cmd = new MySqlCommand(sql, conn);
        cmd.ExecuteNonQuery();
        return Convert.ToInt32(cmd.LastInsertedId);
        DisConnect();
    }

     public static DataTable select(string sql) //Especially fails here
     {
         Connect();
         MySqlCommand cmd = new MySqlCommand(sql, conn);
         using (MySqlDataReader read = cmd.ExecuteReader())
         {
             if (read.HasRows){ Some Code... }
         }
         DisConnect();
     }
  }
4

1 に答える 1

1

MySqlConnection インスタンスは、スレッド セーフであることが保証されていないことに注意してください。複数のスレッドで同時に同じ MySqlConnection を使用することは避けてください。スレッドごとに新しい接続を開き、作業が完了したら閉じることをお勧めします。実際には、接続は Pooling=true; で毎回作成/破棄されるわけではありません。接続文字列オプション - 接続は接続プールに格納されます。これにより、パフォーマンスが大幅に向上します。

また、接続の作成時に「using」句を使用して、接続が自動的に破棄/閉じられ、接続プールに返されるようにすることもお勧めします。

于 2015-01-21T10:17:05.503 に答える