2012-11-16 3 views
5

Tôi đang cố gắng lặp qua một con trỏ. Khi tôi thực hiện lệnh (ký hiệu là sql - xem bên dưới) trực tiếp trong pl/sql, tôi nhận được kết quả được thiết lập với nhiều hàng hơn. Nhưng khi tôi chạy mã này, tôi nhận được chỉ có một hàng:OracleDataReader chỉ trả lại một hàng

using (OracleConnection conn = new OracleConnection(connstring)) 
{ 
    conn.Open(); 
    string sql = "select close, ts from [email protected] 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)); 
      } 

     } 
    } 
} 

Các mã không ném bất kỳ ngoại lệ (ít nhất là không theo một cách thông thường, tôi có nghĩa là nó không chỉ dừng lại hoặc viết chồng dấu vết). Tuy nhiên tôi có thể nhìn thấy những dòng này bởi người đọc Object trong khi gỡ lỗi (tôi không thực sự nghĩ rằng đó là liên quan ở đây, nhưng cho thấy đầu ra "chỉ trong trường hợp"):

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

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

Kết quả nên chỉ có loại DateTimeNumber (10,4) . Và bảng không có các trường có loại lob hoặc dài.

Đây là chương trình bảng:

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 

Truy vấn là chính xác và các mục tồn tại. Hàng trả lại có vẻ là một hàng ngẫu nhiên ... Nó không phải là hàng đầu tiên hoặc cuối cùng. Tôi đang sử dụng ODT với ODAC 11. Tôi có VS2012 và làm việc dưới cửa sổ 7 (32-bit). Tôi đang kết nối với Oracle 10g.

Bất kỳ đầu mối nào tôi đang làm sai?

+0

bạn đã xác minh truy vấn bằng cách chạy nó trong sql * plus hay gì đó? – jeroenh

+0

Có, nó hoạt động và trả về nhiều hàng hơn. – MaMu

Trả lời

2

Xem: Oracle Data Provider for .Netherehere to

Dường như hoàn toàn có thể vấn đề này có thể được giải quyết bằng cách xác định một trong hai điều sau đây: (thất bại trong việc xác định một trong những vấn đề gây ra với cả hai InitialLONGFetchSize và InitialLOBFetchSize)

  • khóa chính

  • ROWID

  • các cột duy nhất - (được xác định là tập hợp các cột có ràng buộc duy nhất đã được xác định hoặc một chỉ mục duy nhất đã được tạo, trong đó ít nhất một trong các cột trong tập hợp có ràng buộc NOT NULL được xác định trên nó)

Không chỉ định giá trị cho cả InitialLONGFetchSize và InitialLOBFetchSize.

+0

Paul, cảm ơn bạn đã phản hồi. Bảng này không có các trường có LOB hoặc loại Dài. – MaMu