关闭 IDataReader 时执行超时已过期

Execution Timeout Expired when closing IDataReader

我正在从 SQL 服务器检索大量数据。一切正常,但是当我尝试使用 语句

中关闭 IDataReader 时
try
    {
      using (SqlConnection con = new SqlConnection(connString))
       {
         con.Open();
         using (SqlCommand command = new SqlCommand(sql_query, con))
         {
           command.CommandTimeout = 0;

           using (IDataReader rdr = new SqlCommand(sql_query, con).ExecuteReader(CommandBehavior.SequentialAccess))
            {
              dataTable = GetDataTableFromDataReader(rdr);
            }
             ....

我得到: 执行超时已过期。操作完成前超时期限已过或服务器未响应。

使用 rdr = null 这样的东西会更好吗?或者有没有其他更好的解决方案如何关闭 IDataReader?

注意连接和命令都有超时设置。您无需在 using 块内手动关闭或处置。

您正在 using 块中创建第二个 SqlCommand,它没有设置超时。更改为:

using (IDataReader rdr = command.ExecuteReader(CommandBehavior.SequentialAccess))
{
    dataTable = GetDataTableFromDataReader(rdr);
}