2010-03-30 117 views
7

我正在从一个C#控制台程序获取大量记录,通过医疗石斑鱼运行它们,然后更新每个记录。它使用MySQL Connector/NET 5.2.7。它的工作方式是使用SQL_BUFFER_RESULT来一次抓取大量数据(即20,000行)以避免锁定。每条记录都通过石斑鱼运行,然后在该记录上完成单独的更新查询。有两个连接使用,一个读连接和一个写连接。MySQL异常 - 在数据读取期间遇到致命错误

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

+0

那是什么抛出的异常? – 2010-09-16 19:37:57

回答

11

between connection.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(); 

问题已解决:)

+0

这似乎也帮助了我,但有没有另一种/更好的方式来永久设置这些超时(在Windows安装),而不是在每个'connection.Open()'后执行一个像这样的命令。 – 2016-08-03 18:30:14

0

我有.NET连接器类似的问题。错误可能与速度有关--C#可能试图比MySQL更快地处理数据。我最终需要做两件事来弥补 - 1.当发生错误时(或者在处理大段后)添加睡眠定时器,以便系统可以“呼吸”或者2.尝试再次读取。

0

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

相关问题