Dar*_*han 2 parallel-processing database-connection c#-4.0
我有以下代码将在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;
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我使用第二个循环即Parallel ForEach循环时,它会在行中给出不同的错误,adapter.Fill(dtTemp);如下所示,
是的当然这些是预期的错误.
注意:有时它像魅力一样工作我的意思是没有错误.
绝对第一个循环,即顺序foreach循环工作正常,但性能不是那么好看,我爱上它:)
现在我的问题是,如果我想使用parallel foreach循环相同,那么我该怎么做?是否有任何化妆品可以帮助Parallel Foreach循环好看;)
提前致谢.
数据库连接一次只能运行一个查询,因此当线程在连接繁忙时尝试运行查询时,会出现错误.如果要并行运行查询,则每个线程都需要自己的数据库连接.
| 归档时间: |
|
| 查看次数: |
13227 次 |
| 最近记录: |