11

我正在开发一个 C# 控制台程序,该程序从表中获取大量记录,通过医疗石斑鱼运行它们,然后更新每条记录。它使用 MySQL 连接器/NET 5.2.7。它的工作方式是我使用 SQL_BUFFER_RESULT 一次抓取数据块(即 20,000 行)以避免锁定。每条记录都通过分组器运行,然后对该记录进行单独的更新查询。使用了两个连接,一个读连接和一个写连接。

因此,当程序执行并遍历读取查询中的记录时,它使用 result.Read() 来执行此操作,其中 result 是 MySqlDataReader。result.Read 调用是引发异常的地方。它是随机发生的(不在同一记录或任何东西上)。一旦在第一条记录上遇到它,它也会在数据读取器的每个后续读取调用中遇到。我已经尝试了很多事情,并搜索了其他人遇到的相关问题。任何见解都会很棒,请随时让我知道我需要提供哪些其他信息。

4

4 回答 4

17

之间连接.Open(); 和 command.ExecuteNonQuery(); 我刚刚添加了这样的两行:

connection.Open();

MySqlCommand cmd = new MySqlCommand("set net_write_timeout=99999; set net_read_timeout=99999", connection); // Setting tiimeout on mysqlServer
cmd.ExecuteNonQuery();

int numOfRecordsUpdated = command.ExecuteNonQuery();

问题已解决:)

于 2011-07-12T19:16:32.730 回答
1

我相信在读取大型数据集时,.NET 连接器存在缓冲区大小限制。我通过一次读取 5000 条记录来解决这个问题。

于 2011-01-26T16:14:41.403 回答
1

或者只是简单地:

cmd.CommandTimeout = 99999;
于 2018-10-11T15:12:05.500 回答
0

我在使用 .NET 连接器时遇到过类似的问题。该错误可能与速度有关 - C# 可能试图以比 MySQL 能够跟上的速度更快的速度处理数据。我最终做了两件事来补救 - 1. 在发生错误时(或在处理大部分之后)添加一个睡眠计时器,以便系统可以“呼吸”或 2. 尝试再次读取。

于 2010-11-15T19:42:13.053 回答