多个线程错误:使用此连接已打开已打开 DataReader, 应该首先关闭
我有一个循环 Parallel.Foreach
这个循环调用一个课程并移动我所有的 DataRows, 但是,这些数据中的每一个或填充 DataTable, 要么执行update命令 MySQL D B。 我两个都有的代码如下所示。
事实是 WCC 包含 10 或附近的空虚,每个空虚都吸引了职能 MySQL 至少一次。 所以,如果阻止 - 这是答案,我可以创造 1 所有空虚的锁定功能? 如果是这样,怎么样? 如果还有另一种方式,请告诉我
谢!
好吧,因为它被提供了我的联合问题
现在代码已更新以反映阻止,请参阅下文。
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, 如果有一个阻塞,如何有两个开放数据阅读器?
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, 如果有一个阻塞,如何有两个开放数据阅读器?
没有找到相关结果
已邀请:
2 个回复
奔跑吧少年
赞同来自:
http://msdn.microsoft.com/en-u ... .aspx
, 但据我所知, MySQL 尚未支持它。
可能,您需要指定除此之外的另一个化合物
. 没有什么能阻止你来自一个以上的连接。 这里的问题是连接是昂贵的资源,因此您必须经济地使用它们。
喜特乐
赞同来自:
你有几个线程 ? 因为看来 2 流使用相同的连接来同时执行呼叫。