Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DbDataReader错误:在读取器关闭时调用Read的尝试无效_C#_C# 4.0_Sqldatareader_Dbdatareader - Fatal编程技术网

C# DbDataReader错误:在读取器关闭时调用Read的尝试无效

C# DbDataReader错误:在读取器关闭时调用Read的尝试无效,c#,c#-4.0,sqldatareader,dbdatareader,C#,C# 4.0,Sqldatareader,Dbdatareader,嗨,我试图从一个方法获取并返回DataReader,但是它在那里返回一个关闭的DbDataReader对象。任何解决这个问题的想法。我愿意接受任何改进代码的建议 谢谢 更新 我不想让数据库连接保持打开状态。是否有任何方法可以在关闭连接后返回打开的DataReader internal DbDataReader ExecuteReader(SqlCommand command, CommandBehavior behavior, string connectionString) { D

嗨,我试图从一个方法获取并返回DataReader,但是它在那里返回一个关闭的DbDataReader对象。任何解决这个问题的想法。我愿意接受任何改进代码的建议

谢谢

更新 我不想让数据库连接保持打开状态。是否有任何方法可以在关闭连接后返回打开的DataReader

internal DbDataReader ExecuteReader(SqlCommand command, CommandBehavior behavior, string connectionString)
  {
    DbDataReader dataReader = null;
    try
    {
      SqlConnection connection = GetConnection(connectionString);
      Open(connection);
      command.Connection = connection;
      command.CommandTimeout = 60;
      dataReader = command.ExecuteReader(behavior);
      Close(connection);
    }
    catch
    {
    }
    return dataReader;
}

它已关闭,因为您已关闭数据库连接。它无法从关闭的SqlConnection读取数据。如果要重用连接,可以将打开的连接传递给该方法,并在从DbDataReader读取数据后关闭连接。

如果在
返回dataReader上设置断点,此时是否关闭?您好@NeilKnight,是的,此时已关闭您可能还需要考虑您的空捕获块。你肯定不想吞下所有的例外,是吗?嗨@bryancrossby,它不是空的。我正在记录错误。我只是在发布时删除了它,使其简短易读。谢谢你。我建议至少保留您试图捕获的异常类型,例如catch(exception exc)etcHi@Adriano,如果我保持连接打开是否会有问题?您必须尽快关闭连接(服务器的连接是有限的资源),即使垃圾回收器稍后会释放连接。这并不意味着您必须立即关闭连接,花时间使用数据,然后关闭连接。