c#-4.0 - 如何处理数据库连接的并行执行 C#

标签 c#-4.0 database-connection parallel-processing

我有以下代码将在 SQL SERVER 2008R2 中的每个数据库上触发查询,

public DataTable GetResultsOfAllDB(string query)
        {
            SqlConnection con = new SqlConnection(_ConnectionString);
            string locleQuery = "select name from [master].sys.sysdatabases";
            DataTable dtResult = new DataTable("Result");
            SqlCommand cmdData = new SqlCommand(locleQuery, con);
            cmdData.CommandTimeout = 0;

            SqlDataAdapter adapter = new SqlDataAdapter(cmdData);
            DataTable dtDataBases = new DataTable("DataBase");
            adapter.Fill(dtDataBases);

            // This is implemented for sequential           
            foreach (DataRow drDB in dtDataBases.Rows)
            {
                locleQuery = " Use [" + Convert.ToString(drDB[0]) + "]; " + query;
                cmdData = new SqlCommand(locleQuery, con);
                adapter = new SqlDataAdapter(cmdData);
                DataTable dtTemp = new DataTable();
                adapter.Fill(dtTemp);
                dtResult.Merge(dtTemp);
            }

            //Parallel Implementation
            Parallel.ForEach(dtDataBases.AsEnumerable(), drDB =>
                {
                    locleQuery = " Use [" + Convert.ToString(drDB[0]) + "]; " + query;
                    con = new SqlConnection(_ConnectionString);
                    cmdData = new SqlCommand(locleQuery, con);
                    cmdData.CommandTimeout = 0;
                    adapter = new SqlDataAdapter(cmdData);
                    DataTable dtTemp = new DataTable();
                    adapter.Fill(dtTemp);
                    dtResult.Merge(dtTemp);
                }
            );

            return dtResult;

        }

现在的问题是当我使用第二个循环时,即 Parallel ForEach循环它在 adapter.Fill(dtTemp); 行给了我不同的错误如下,

是的,当然这些都是预期的错误。
  • 连接已关闭
  • 连接正在打开,
  • 数据读取器关闭
  • 阅读器正在连接..
    Blha Blha ... 所有与连接相关的错误。

  • 注意:有时它像魅力一样工作,我的意思是没有错误。

    绝对是第一个循环,即顺序 foreach循环工作正常,但性能不是很好看,我爱上了它:)

    现在我的问题是我是否想使用 parallel foreach循环相同,那么我应该怎么做?是否有任何化妆品可以帮助 Parallel Foreach 循环好看;)

    提前致谢。

    最佳答案

    数据库连接一次只能运行一个查询,因此当一个线程在连接繁忙时尝试运行查询时,您会收到错误消息。如果要并行运行查询,每个线程都需要自己的数据库连接。

    关于c#-4.0 - 如何处理数据库连接的并行执行 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9596833/

    相关文章:

    mysql - Hibernate:无需用户名或密码即可连接到 MySQL

    concurrency - 大矩阵求逆

    windows - FileSystemWatcher 停止监视网络文件夹

    asp.net-mvc - 如何在 mvc 中将 formcollection 转换为模型

    c# - 如何在服务器 app.config 中保存动态端点?

    c# - 简单的 C# Xml 序列化

    java - 如何使用 PHP 和 android studio(服务器 00webhost)将数据存入数据库?

    mysql - 我们可以获得 MySQL 服务器的只读连接吗?或者默认将 autocommit 设置为 false ?

    c++ - 如何使用一些 MPI 命令(或组合命令)在两个处理器之间交换存储在二维数组中的数据?

    c# - 并行操作的线程安全