2012-05-04 40 views
5

閱讀我剛剛安裝了一個Oracle Express數據庫,我試圖從我已經擺在那裏一個表中讀取一些數據:問題從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(); 
    } 
} 

在它只是退出,因爲讀者做了while (reader.Read())不保存任何數據。哪裏不對? Connectionstring?我在與Oracle Express一起安裝的commandprompt工具中運行了相同的SELECT,並且它工作正常。

+2

您確定連接已正確打開並且ExecuteReader可以正常工作嗎?你是否在賦值之後和進入while循環之前放置了一個斷點並檢查了讀者對象的值? –

+1

如果您將在sqlplus或任何其他工具中運行它,此選擇是否返回任何行? – igofed

+0

嘗試不帶WHERE子句的select – Adauto

回答

5

當連接到任何系統時,首先要做的事情就是查看/測試它是否成功,然後繼續。沒有這些簡單的測試,你的應用程序就會像定時炸彈一樣行事。一些防禦性編程會使你的項目更容易調試。 不是您正在尋找的答案,但是當前連接的狀態在查詢執行時不明確。

2

表人員在SYSTEM模式中? 運行另一個查詢,如'從user_objects中選擇object_name',並向我們提供您所做的更新。

+0

或者只是執行SELECT * FROM DUAL – igofed

1

這已經很長一段時間了,因爲我不使用Oracle與.Net,但我不知道你使用哪個數據庫(是「xe」?)。在SQL Server中,我使用連接字符串中的INITIAL CATALOG來指定它。在這裏你有不同的連接字符串來嘗試:http://www.connectionstrings.com/oracle。我也將開始打開連接。

0

位遲到了,但...

我有訪問視圖同樣的問題,它變成了適當的權限沒有授予它。一旦我將SELECT特權授予了我的用戶ID,我就可以獲得我的數據。