MySqlDataAdapter.Fill()缓慢/失败

本文关键字:失败 缓慢 Fill MySqlDataAdapter | 更新日期: 2023-09-27 18:06:18

我目前使用MySQL.Data扩展,以便将MySQL数据库信息加载到我的c#应用程序中。我使用MySqlDataAdapter.Fill()命令将数据加载到DataTable中。
这个解决方案适用于我的大多数表,除了较大的表。例如,我有一个大约1,310,634行的表。当我尝试用该数据填充DataTable时,应用程序将挂起并最终失败,并出现异常:

异常无法从传输连接中读取数据:连接尝试失败,因为被连接方在一段时间后没有正确响应,或已建立的连接失败,因为连接的主机未能响应。

我已经尝试了解决方案,我增加MySQL连接的超时与命令像set net_write_timeout=99999; set net_read_timeout=99999;,但它似乎没有帮助。

这是目前为止我的c#代码:
//Construct output DataTable
DataTable output = new DataTable();
MySqlDataAdapter ad = new MySqlDataAdapter(query, connection); 
try
{
    ad.FillSchema(output, SchemaType.Mapped); //Filling Columns, Types, Limitations
    ad.Fill(output); //Filling Data
    ad.Dispose();                
}
catch (Exception ex)
{ throw; }
return output;  

MySqlDataAdapter.Fill()缓慢/失败

如上所述,问题的最佳解决方案是重构您的解决方案。比起从数据库中获取整个表,使用一些SQL select语句只获取完成手头任务真正需要的行。

如果你真的需要处理整个表,例如,为了进行某种SQL无法完成的一致性检查,那么你可以按部分加载数据,一次只选择100K行。

但是,我再次怀疑同时获取超过一百万行的多个表是一个有效的用例,因此不应该执行…