2012-05-04 4 views
5

Tôi vừa mới cài đặt một cơ sở dữ liệu nhanh Oracle và đang cố gắng để đọc một số dữ liệu từ một bảng Tôi đã đặt trong đó:Sự cố đọc từ Oracle

using (OracleConnection conn = new OracleConnection("Data Source=localhost:1521/xe;Persist Security Info=True;User ID=SYSTEM;Password=SYSTEMPASSWORD")) 
{ 
    OracleCommand command = new OracleCommand("SELECT * FROM Persons WHERE Firstname = 'John'", conn); 
    conn.Open(); 
    OracleDataReader reader = command.ExecuteReader(); 

    try 
    { 
     while (reader.Read()) 
     { 
      string strResult = reader.GetString(0); 
     } 
    } 
    catch (OracleException oex) 
    { 
     MessageBox.Show(oex.Message, "Oracle error"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error"); 
    } 
    finally 
    { 
     reader.Close(); 
    } 
} 

Trên while (reader.Read()) nó chỉ bỏ kể từ khi người đọc không không giữ bất kỳ dữ liệu nào. Chuyện gì thế? Connectionstring? Tôi đã chạy cùng một SELECT trong công cụ commandprompt được cài đặt với Oracle express và nó hoạt động tốt.

+2

bạn có chắc là kết nối được mở đúng cách và ExecuteReader hoạt động mà không có ngoại lệ? bạn đã đặt một breakpoint và kiểm tra giá trị của đối tượng người đọc sau khi chuyển nhượng và trước khi vào vòng lặp while? –

+1

Lựa chọn này có trả về bất kỳ hàng nào nếu bạn chạy nó trong sqlplus hay bất kỳ công cụ nào khác không? – igofed

+0

Hãy thử chọn mà không có mệnh đề WHERE – Adauto

Trả lời

5

Điều đầu tiên cần thực hiện khi kết nối với hệ thống bất kỳ là xem/kiểm tra nếu thành công và sau đó tiếp tục. Nếu không có các loại xét nghiệm đơn giản này, ứng dụng của bạn sẽ bị coi là hành vi giống như quả bom thời gian. Một chút lập trình phòng thủ sẽ làm cho các dự án của bạn dễ dàng hơn để gỡ lỗi. Không thực sự là câu trả lời bạn đang tìm kiếm nhưng hiện trạng thái kết nối không rõ ràng tại thời điểm thực thi truy vấn.

2

Bảng Persons nằm trong lược đồ SYSTEM? Chạy truy vấn khác, như 'chọn object_name từ user_objects' và cung cấp cho chúng tôi thông tin cập nhật về những gì bạn đã thực hiện.

+0

hoặc chỉ thực hiện SELECT * FROM DUAL – igofed

1

Đã lâu rồi tôi không sử dụng Oracle với .Net, nhưng tôi không thấy cơ sở dữ liệu nào bạn sử dụng (có phải là "xe" không?). Với SQL Server, tôi chỉ định nó với CATALOG INITIAL trong chuỗi kết nối. Ở đây bạn có các chuỗi kết nối khác nhau để thử: http://www.connectionstrings.com/oracle. Tôi cũng sẽ bắt đầu bằng cách mở kết nối.

0

Bit muộn cho bữa tiệc nhưng ...

Tôi đã gặp vấn đề tương tự khi truy cập chế độ xem và hóa ra các đặc quyền thích hợp không được cấp trên đó. Khi tôi đã cấp đặc quyền SELECT cho id người dùng của mình, tôi có thể lấy dữ liệu của mình.