2012-07-04 180 views
1

我使用下面的代碼連接到我的oracle數據庫並執行查詢。我在示例中使用的查詢只是從表中提取一組行。但是,我不斷收到「表或視圖不存在」的錯誤消息。但是,我很確定該表存在於數據庫中。我哪裏錯了?從oracle數據庫提取數據

public void UpdateDatabase() 
     { 
      System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(); 
      conn.ConnectionString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.144)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)));UID=mwm;PWD=mwm"; 
      conn.Open(); 
      OracleCommand command = conn.CreateCommand(); 
      command.CommandText = "Select * from Task"; 
      command.ExecuteNonQuery(); 
      command.Dispose(); 
     } 

當達到command.ExecuteNonQuery()時觸發該錯誤。

+0

您的連接字符串是否正確?你是否連接到正確的數據庫? – Habib

+0

@ Habib.OSU ya ya連接字符串是正確的。否則,我會得到連接字符串本身的錯誤我的朋友...和亞,我連接到正確的數據庫 – user1501034

+0

權限呢?用戶* mwm *是否有權使用該表?或者'Task'是Oracle中的保留字(不確定)。 –

回答

2

我認爲這個問題是command.ExecuteNonQuery();

其實你在這裏執行查詢,因此,你應該使用DataAdapterDataReader

public void UpdateDatabase() 
{ 
    System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(); 
    conn.ConnectionString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.144)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)));UID=mwm;PWD=mwm"; 
    conn.Open(); 
    OracleCommand command = conn.CreateCommand();    
    SqlDataAdapter a = new SqlDataAdapter("Select * from \"Task\"", command))    
    DataTable t = new DataTable(); 
    a.Fill(t); 
    command.Dispose(); 
} 
1

任務是oracle Reserve Word,這就是爲什麼你得到這個錯誤。使用雙引號。

command.CommandText = "Select * from \"Task\""; 

ExectueNonQuery,可能不會給你任何錯誤,但它不會給你想要的結果。你需要做command.ExecuteReader。查看鏈接。

你也可以看到這個Getting Started with Oracle Data Provider for .NET (C# Version)

+0

你確定?我已經通過查詢作爲一個字符串..不需要它作爲一個字符串?或將它作爲一個保留字只? – user1501034

+1

根據Asif的回答,還有一件事我注意到了,爲什麼你使用ExecuteNonQuery,它用於插入,更新或刪除語句,而不是用於選擇 – Habib

+0

@ user1501034,它將把它作爲一個字符串,這就是爲什麼你需要發送'選擇*從「任務」' – Habib