OracleDataReader在检查后丢失了结果

时间:2009-01-20 15:23:26

标签: c# visual-studio oracle debugging

我在Visual Studio中遇到了一个古怪的“功能”,我有兴趣看看是否有其他人注意过这一点。或者如果它特定于我自己。

我有一些方法可以对数据库执行SQL查询,然后返回OracleDataReader

method()
{
OracleCommand cmd = new command(query, connection);
OracleDataReader r = cmd.ExecuteReader();

return r;
}

当我调试使用此方法的代码时。 我可以单击非公共成员来查看结果中的行。 但是,一旦我查看了这些结果,试图执行一个读取器。在OracleDataReader上的.adad()不包含任何结果。在调试器视图中检查结果会将阅读器显示为空。

任何时候我都不检查结果,执行Read的代码没有任何问题。

我没有通过谷歌找到这方面的证据,但我的搜索技能往往有很多不足之处。如果有人能够在他们自己的系统上证实这一点,或者对原因有所了解,我会非常感激。

非常感谢。

2 个答案:

答案 0 :(得分:1)

从IDataReader派生的ADO.NET对象(如OracleDataReader)提供对查询返回的数据的连接,仅向前访问,因此当您在调试可视化工具中查看结果时,实际上是在逐步查看实际数据。程序运行时,DataReader已遍历数据并报告(正确)它现在为空。

如果您希望灵活地在调试器中查看数据,可以考虑使用断开的随机访问数据访问类,如DataSet或DataTable。

答案 1 :(得分:1)

我看到了相反的情况。我做了

    OracleDataReader reader = cmd.ExecuteReader();
    return reader;
    .... return it up the stack a couple more levels;

除非我在堆栈的每个级别调用reader.hasRows,否则我的结果似乎会消失,当我尝试访问它时我会得到空指针。