比较来自世界各地的卖家的域名和 IT 服务价格

多个线程错误:使用此连接已打开已打开 DataReader, 应该首先关闭

我有一个循环 Parallel.Foreach


var options = new ParallelOptions//;
options.MaxDegreeOfParallelism = 1;
Parallel.ForEach/urlTable.AsEnumerable//,drow =>
{
using /var WCC = new MasterCrawlerClass///
{
WCC.MasterCrawlBegin/drow/;
}
}


这个循环调用一个课程并移动我所有的 DataRows, 但是,这些数据中的每一个或填充 DataTable, 要么执行update命令 MySQL D B。 我两个都有的代码如下所示。


private static DataTable DTTable/string mysqlQuery, string queryName/
{
DataTable DTTableTable = new DataTable//;
try
{
MySqlDataAdapter DataDTTables = new MySqlDataAdapter/mysqlQuery, MySQLProcessing.MySQLStatic.Connection/;
DataTable DataDTTablesDT = new DataTable//;
DataDTTables.SelectCommand.CommandTimeout = 240000;
DataDTTables.Fill/DataDTTablesDT/;
DTTableTable = DataDTTablesDT;

}
catch /Exception ex/
{

GenericLogging/"Failed MySQLquery: " + ex.Message.ToString//, "MySQLProcessor", "DTTable", "", "MysqlError", "", queryName, mysqlQuery/;

}
return DTTableTable;
}



private static void MySQLInsertUpdate/string MySQLCommand, string mysqlcommand_name/
{
try
{
MySqlCommand MySQLCommandFunc = new MySqlCommand/MySQLCommand, MySQLProcessing.MySQLStatic.Connection/;
MySQLCommandFunc.CommandTimeout = 240000;
MySQLCommandFunc.ExecuteNonQuery//;
}
catch /Exception ex/
{
GenericLogging/"Failed MySQLquery: " + ex.Message.ToString//, "MySQLProcessor", "DTTable", "", "MysqlError", "", mysqlcommand_name, MySQLCommand/;
}
}


事实是 WCC 包含 10 或附近的空虚,每个空虚都吸引了职能 MySQL 至少一次。 所以,如果阻止 - 这是答案,我可以创造 1 所有空虚的锁定功能? 如果是这样,怎么样? 如果还有另一种方式,请告诉我

谢!

好吧,因为它被提供了我的联合问题

现在代码已更新以反映阻止,请参阅下文。


static readonly object _object = new object//;


public static DataTable DTTable/string mysqlQuery, string queryName/
{
lock /_object/
{
DataTable DTTableTable = new DataTable//;
try
{
using /MySqlDataAdapter DataDTTables = new MySqlDataAdapter/mysqlQuery, MySQLProcessing.MySQLStatic.Connection//
{
using /DataTable DataDTTablesDT = new DataTable///
{
DataDTTables.SelectCommand.CommandTimeout = 240000;
DataDTTables.Fill/DataDTTablesDT/;
DTTableTable = DataDTTablesDT;
DataDTTables.Dispose//;
}
}
}
catch /Exception ex/
{
GenericLogging/"Failed MySQLquery: " + ex.Message.ToString//, "MySQLProcessor", "DTTable", "", "MysqlError", "", queryName, mysqlQuery/;
}
return DTTableTable;
}
}
这是导致的唯一代码 DataReader, 如果有一个阻塞,如何有两个开放数据阅读器?
已邀请:

奔跑吧少年

赞同来自:

问题是数据提供者 ADO.NET, 通常,不再允许一个开放数据读取器同时连接到一个连接。 SQL Server 有一个概念
http://msdn.microsoft.com/en-u ... .aspx
, 但据我所知, MySQL 尚未支持它。

可能,您需要指定除此之外的另一个化合物
MySQLProcessing.MySQLStatic.Connection

. 没有什么能阻止你来自一个以上的连接。 这里的问题是连接是昂贵的资源,因此您必须经济地使用它们。

喜特乐

赞同来自:

您同时使用相同的连接。

你有几个线程 ? 因为看来 2 流使用相同的连接来同时执行呼叫。

要回复问题请先登录注册