2017-02-21 70 views
0

我面临的问题是使用属于Microsoft Enterprise Library的Execute reader的常见功能。Microsoft Enterprise Library ExecuteReader返回关闭Datarow

总体代码是非常简单:

using (IDataReader dataReader = db.ExecuteReader(sqlCommand)) 
       { 
        dt.Load(dataReader); 
       } 

的代码完全适用于除一,其给出了以下结果所有的场景:在检查物业IsClosed

The operation is invalid. OracleDataReader is closed 

也是如此。

谷歌搜索没有任何帮助,任何有经验的人都可以为我解决问题。

+0

您是否验证过在这种情况下没有发生错误,因此没有被处理,因此被使用吞噬并且所讨论的查询实际上正在返回结果集? –

+0

Ya Query很好,在SQL Server中检查过它,变量的作用域也很好。该功能从多个位置调用,仅在一种情况下存在问题。我一直在检查SQLCommand的异常情况,假设它只是错误的根源,至今还没有运气。 – Riddler

回答

0

在你的using声明之前,你应该检查连接是否打开,如果没有打开,那么你必须打开它。

if (db.Connection.State != ConnectionState.Open) 
{ 
    db.Connection.Open(); 
} 
+0

db没有Connection.State属性,但这是我正在寻找的解决方案。变量db的类型为Microsoft.Practices.EnterpriseLibrary.Data.Database – Riddler

+0

您是否有OracleConnection对象?如果是这样,那么你应该能够打开连接。作为参考,我使用[这里]的第一个C#示例(https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledatareader(v = vs.110).aspx#Remarks) 。 –