我正在托管使用mysql连接器的WCF服务。由于某种原因每5-10分钟一次,我得到一个错误,即mysql已经在使用中。我该怎么办?将其设置为阻塞,让它为每个线程创建一个新连接,或者设置一个创建一组连接的管理器,并阻塞直到连接可用。实际上,异步调用已经完成了最后一部分吗?最后是阻塞的最佳方法,直到另一个线程完成并从该线程获取信息?
public static int Query(this IDbConnection olddb, string query, params object[] args)
{
using (var db = olddb.CloneEx())
{
db.Open();
using (var com = db.CreateCommand())
{
com.CommandText = query;
for (int i = 0; i < args.Length; i++)
com.AddParameter("@" + i, args[i]);
return com.ExecuteNonQuery();
}
}
}
Unhandled Exception: System.NotImplementedException: The requested feature is not implemented. at MySql.Data.MySqlClient.MySqlConnection.EnlistTransaction (System.Transactions.Transaction transaction) [0x00000] in :0 at MySql.Data.MySqlClient.MySqlConnection.Open () [0x00000] in :0
答案 0 :(得分:11)
每当您需要简单地查询SQL服务器时:
using (var conn = new MySqlConnection("Some connection string"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT foo FROM bar";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// process the results
}
}
}
这可确保将连接返回到ADO.NET为您管理的连接池中,从而不会产生任何可能导致速度变慢的连接的风险。此代码也是完全可重入的,因此根据定义,thread safe =&gt;它可以从你想要的多个线程中同时执行。