4

カーソルをループしようとしています。pl/sql でコマンド (sql と表示 - 以下を参照) を直接実行すると、より多くの行を含む結果セットが得られます。しかし、このコードを実行すると、1 行しか表示されません。

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));
             }

         }
     }
}

コードは例外をスローしません (少なくとも通常の方法ではありません。つまり、停止したり、スタック トレースを書き込んだりしません)。ただし、デバッグ中にリーダーオブジェクトでこれらの行を確認できます(ここでは関係ないと思いますが、「念のため」出力を表示しています):

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

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

結果には、型DateTimeとのみが含まれる必要がありNumber (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

クエリは正しく、エントリは存在します。返された行はランダムな行のようです...最初の行でも最後の行でもありません。ODAC 11 で ODT を使用しています。VS2012 を使用しており、Windows 7 (32 ビット) で作業しています。Oracle 10g に接続しています。

私が間違っている手がかりはありますか?

4

1 に答える 1

2

参照: Oracle Data Provider for .Netおよびこちらこちら

次のいずれかを指定することで問題を解決できる可能性が非常に高いようです: (これらのいずれかを指定しないと、InitialLONGFetchSize と InitialLOBFetchSize の両方で問題が発生します)

  • 主キー

  • ROWID

  • 一意の列 - (一意の制約が定義されているか、一意のインデックスが作成されている一連の列として定義され、セット内の列の少なくとも 1 つに NOT NULL 制約が定義されています)

InitialLONGFetchSize と InitialLOBFetchSize の両方の値を指定していない。

于 2012-11-16T12:19:38.153 に答える