2012-09-04 33 views
51

我在甲骨文公司(11克)數據庫中創建兩個表是這樣的:ORA-00911:無效字符

create table "test" ("id" int); 
    create table test ("id" int); 

然後在我的C#程序中存在一個問題:

OracleConnection conn = new OracleConnection(-myConnectionString-); 
    conn.Open(); 
    OracleCommand command = new OracleCommand("select * from test;", conn); 
    var v = command.ExecuteReader(); 
    OracleCommand command = new OracleCommand("select * from \"test\";", conn); 
    var v = command.ExecuteReader(); 

兩個命令.ExecuteReader()我有一個「ORA-00911:無效的字符」錯誤。

+0

不要將C#語法與Oracle語法混淆。 ';'在C#中。 –

+0

您是否曾嘗試在某些Oracle客戶端(蟾蜍或pl-sql開發人員)中執行此查詢? –

+4

@NikhilAgrawal SQL的許多方言都允許'''作爲查詢之間的分隔符,所以它可能是C#而不是C#所混淆。 –

回答

141

刪除; (分號)

+1

很好的答案,謝謝。 – MJM

+0

剛剛過來。如果我需要在同一命令的兩個不同表上執行2條更新語句,該怎麼辦?放分號會產生錯誤。 –

+0

你爲什麼需要它在一個命令? –

1

爲什麼在查詢中使用分號......它只是被當作無效字符..... 您必須從分號(;)中刪除分號查詢和這樣做:

OracleConnection conn = new OracleConnection(-myConnectionString-); 
    conn.Open(); 
    OracleCommand command = new OracleCommand("select * from test", conn); 
    var v = command.ExecuteReader(); 
    OracleCommand command = new OracleCommand("select * from \"test\"", conn); 
    var v = command.ExecuteReader(); 

此錯誤的更多詳細信息,可以閱讀here

1

這不是這傢伙的問題,但希望這會幫助別人那裏:

我經常有這樣的問題,隱藏內部註釋裏面單引號,像這樣:

select foo 
from bar 
where 
/* some helpful comment with a "can't" or somesuch */ 
baz='qux' 

無與倫比評論中的單引號導致了各種戲劇,並且甲骨文並沒有竭盡全力幫助你解決這個問題。

+0

非常有用。謝謝! – Gaetano

31

如果其他人拉閘這裏尋找如何將單一命令多個語句,你需要用你的語句中開始結束。這將停止由於分號導致的無效字符錯誤。例如:

var command = new OracleCommand(@" 
    begin 
    select * from test; 
    select * from test2; 
    end;") 
+1

舊的答案,但非常有用! – GuFigueiredo

+0

如何做多重創建? – Slovo

+1

當我嘗試使用這個時,我得到以下異常:「PLS-00428:預期在此SELECT語句中使用INTO子句」 – RBarryYoung

-1

deleteupdateinsert命令與:Column_name更換的SqlDataSource參數?

+0

你問這個問題或在這裏給出答案嗎? – UmarZaii

+0

歡迎來到Stack Overflow!如果還有其他問題,請點擊[提問](// stackoverflow.com/questions/ask)按鈕。 – ItamarG3

+0

如果您有新問題,請點擊[問問題](https://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 - [來自評論](/ review/low-quality-posts/16949997) – ItamarG3