C# Mysql 和多线程?

标签 c#

我正在托管一个使用 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

最佳答案

每当您需要简单地查询 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 为您管理的连接池中,这样您就不会冒创建多个连接的风险,这可能会减慢速度。此外,此代码是完全可重入的,因此根据定义是线程安全的 => 它可以从任意多个线程并发执行。

关于C# Mysql 和多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6866421/

相关文章:

java - 与 C# 相比,从 Java 获取错误字节

c# - WP - 如何以编程方式删除 hyperlinkBut​​ton 中的下划线?

C# 有理由不再使用 ArrayList 而不是 List<T> 吗?

c# - 如何防止 System.Xml.XmlException : Invalid character in the given encoding

c# - 如何让 XAML 命令执行异步?

c# - CS0029 读取用户输入时

c# - 如果服务未注册,请勿调用该方法

c# - WPF 动画 FPS 与 CPU 使用率 - 我是否期望太多?

c# - 如何在奇数页和偶数页的文档中添加页脚

c# - 任何用于 Visual Studio 的错误跟踪插件?