OracleDataReader 只返回一行数据

4

我想要遍历一个游标。当我直接在PL/SQL中执行命令(表示为sql-见下文)时,我会得到更多的行结果集。 但是,当我运行这个代码时,我只得到了一行:

using (OracleConnection conn = new OracleConnection(connstring))
{
    conn.Open();
    string sql = "select close, ts from dpr@price where qot_id=2029543939 and ts>='" + start + "' and  ts<='" + end + "'";
    using (OracleCommand comm = new OracleCommand(sql, conn))
    {
        using (OracleDataReader rdr = comm.ExecuteReader())
        {
             while (rdr.Read())
             {                                
                  Console.WriteLine(rdr.GetOracleDecimal(0));
             }

         }
     }
}

这段代码没有抛出异常(至少不是通常的方式,我的意思是它不会停止或写入堆栈跟踪)。然而,在调试时,我可以通过reader对象看到这些行(我并不认为这在这里很相关,但“以防万一”展示一下输出):

InitialLONGFetchSize = 'rdr.InitialLONGFetchSize' threw an exception of type 'System.NullReferenceException' 

InitialLOBFetchSize = 'rdr.InitialLOBFetchSize' threw an exception of type 'System.NullReferenceException'

结果应只包含类型为 DateTimeNumber (10,4) 的字段。表中无类型为 lob 或 long 的字段。
以下是表格方案:
QOT_ID    NUMBER
TS            DATE
CLOSE     NUMBER
OPEN      NUMBER
HIGH      NUMBER
LOW       NUMBER
KASSE     NUMBER
VOLUME    NUMBER
CLOSE_BID     NUMBER
SPL_BEREINIGT VARCHAR2
OPEN_INTEREST NUMBER
TRADES    NUMBER
TURNOVER      NUMBER
HIGH_BID      NUMBER
LOW_ASK   NUMBER

查询语句正确且记录存在,但返回的行似乎是随机的,既不是第一行也不是最后一行。我正在使用ODT和ODAC 11。我有VS2012并在Windows 7(32位)下工作。我连接到Oracle 10g。

有什么线索可以告诉我我做错了什么吗?


你是否通过在SQL*Plus或其他工具中运行查询来验证它? - jeroenh
是的,它有效并返回更多行。 - MaMu
1个回答

2
请参见:Oracle Data Provider for .Net这里以及这里 看起来问题可能通过指定以下任一内容来解决:(未指定以下任一内容会导致InitialLONGFetchSize和InitialLOBFetchSize都出现问题)
- 主键 - ROWID - 独特的列 - (定义为已定义唯一约束或已创建唯一索引的一组列,其中该集合中的至少一个列在其上定义了NOT NULL约束)
如果无法解决,请同时指定InitialLONGFetchSize和InitialLOBFetchSize的值。

Paul,感谢您的反馈。此表中没有LOB或Long类型的字段。 - MaMu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接