0

我正在使用与多线程 sdk 交互的 c# 编写数据库类。我应该只使用一个连接(不用说!)但是,我总是收到有关connection 和 datareaders的错误。Anly 帮助表示赞赏。

这是我的代码的结构

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; 不会每次都创建/处理连接。连接字符串选项 - 连接将存储在连接池中。这大大提高了性能。

我还建议在创建连接时使用“使用”子句,以便自动释放/关闭并返回连接池。

于 2015-01-21T10:17:05.503 回答