C#MySQL和多线程? [英] C# Mysql and multiple threads?

查看:594
本文介绍了C#MySQL和多线程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我主持它使用的MySQL Connector WCF服务。出于某种原因,每隔5-10分钟我得到一个错误是,MySQL已在使用。我该怎么办?设置它,这样它块,有它创建每个线程或安装程序中创建连接的一组号码,将阻塞,直到一个连接可用一个经理一个新的连接。实际上做的异步调用已经做最后一部分?最后什么来阻止最好的办法,直到另一个线程完成,并从该线程获取信息?



 公共静态INT查询(此的IDbConnection OLDDB ,查询字符串,params对象[]参数)
{
使用(VAR DB = olddb.CloneEx())
{
db.Open();
使用(VAR COM = db.CreateCommand())
{
com.CommandText =查询;
的for(int i = 0; I< args.Length;我++)
com.AddParameter(@+ I,ARGS [I]);

返回com.ExecuteNonQuery();
}
}
}



未处理的异常: System.NotImplementedException:请求的功能未实现。 
在MySql.Data.MySqlClient.MySqlConnection.EnlistTransaction(System.Transactions.Transaction交易)[0x00000]中:0 $在MySql.Data.MySqlClient.MySqlConnection.Open B $ B()[0x00000]中:0


解决方案

每次你需要简单地查询您的SQL服务器:

 使用(VAR康恩=新的MySqlConnection(一些连接字符串))
使用(VAR CMD = conn.CreateCommand())
{
conn.Open();
cmd.CommandText =SELECT FROM foo的酒吧;使用
(VAR读卡器= cmd.ExecuteReader())
{
,而(reader.Read())
{
//处理结果
}
}
}

这确保了连接返回到连接池这ADO.NET为您管理和让你不会创造可能减缓的事情了多个连接的任何风险。另外这个代码是完全折返,从而定义线程安全=>它可以同时从如你所愿尽可能多线程执行。


I am hosting a WCF service which uses the mysql connector. For some reason once every 5-10 minutes I get an error that mysql is already in use. What should I do? Set it up so that it blocks, have it create a new connection per thread or setup a manager which creates a set number of connections and will block until a connection becomes available. Actually do the asynchronous calls already do that last part? Lastly whats the best way to block until another thread completes and get information from that thread?

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

解决方案

Everytime you need to query your SQL server simply:

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
        } 
    }
}

This ensures that connections are returned into the connection pool that ADO.NET manages for you and so that you don't get any risks of creating multiple connections that could slow things up. Also this code is perfectly reentrant and thus by definition thread safe => it could be executed concurrently from as many threads as you wish.

这篇关于C#MySQL和多线程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆