我正在使用与多线程sdk交互的c#编写Database类。我应该只使用一个连接(不需要说!)但是,我总是得到关于连接和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();
}
}
答案 0 :(得分:1)
请注意,MySqlConnection实例不保证是线程安全的。您应该避免同时在多个线程中使用相同的MySqlConnection。建议每个线程打开一个新连接,并在完成工作后关闭它。实际上,每次使用Pooling = true时都不会创建/处理连接;连接字符串选项 - 连接将存储在连接池中。这极大地提升了性能。
我还建议在创建连接时使用'using'子句,以便它自动处理/关闭并返回到连接池。