2009-10-06 91 views
4

我試圖通過ODP.NET執行SQL查詢來創建表,但我總是得到一個ORA-00911'無效字符'錯誤。即使在SQL查詢本身中沒有換行符,異常中的Errors對象始終具有文本「ORA-00911:無效字符\ n」。無法通過ODP.NET執行SQL查詢 - 無效字符錯誤

我執行SQL代碼是這樣的:

using (OracleConnection conn = new OracleConnection(<connection string>) { 
using (OracleCommand command = conn.CreateCommand()) { 
    conn.Open(); 
    command.CommandText = queryString; 

    command.ExecuteNonQuery();   // exception always gets thrown here 
} 

的queryString包含一個CREATE TABLE語句,當通過SQL開發人員執行工作正常

編輯:我在執行SQL是這樣的:

CREATE TABLE "TESTSYNC"."NEWTABLE" (
    "COL1" NUMBER(*,0) NULL, 
    "COL2" NUMBER(*,0) NULL 
); 

與換行符刪除

+2

您可以發表評論文字嗎? – 2009-10-06 11:09:19

回答

9

Other people遇到此問題 - ODP.NET不支持文本命令中的多個SQL語句。解決方案是在每條語句周圍使用EXECUTE IMMEDIATE將其包裝在PL/SQL塊中。這種缺乏支持;對我來說似乎令人難以置信的頭腦,並沒有改善我對oracle開發團隊的看法。

此外,這似乎是與甲骨文本身的問題,因爲我有與MS和ODBC甲骨文客戶端相同的問題。

+1

2013年似乎還沒有給我們支持這個?! – DELUXEnized 2013-07-16 08:30:16

+0

你能詳細說明一個代碼示例嗎?我們中有些人並不真正瞭解太多pl。 – 2014-07-24 08:24:38

+1

對於到達這裏的其他人,正如@thecoop在另一評論中提到的那樣,如果您只有一條語句,請刪除;最後。這是我的問題。 – eol 2015-04-16 18:23:25

0

呦你的引號是可以的(它只是迫使甲骨文把你的對象名稱作爲區分大小寫,即大寫的方式,你寫它),但我不敢肯定你可以用*來定義NUMBER。

+0

這是從dbms_metadata.get_ddl獲得的語法,其中列是使用數據類型INT – thecoop 2009-10-06 12:00:56

+1

創建的。我已經玩過了,它實際上抱怨的是:在最後 - 刪除,使SQL語句運行沒有問題。然而,這對我來說似乎非常奇怪。 – thecoop 2009-10-06 12:19:42

+0

你也許可以設置TKPROF在你的數據庫服務器上運行,看看你的OracleCommand對象產生了什麼SQL(即看看是否自動生成「;」) – davek 2009-10-06 12:44:26

0

我不知道是否在sql中的「*」是否在創建時沒有*嘗試調用?我敢打賭,這是ODP.Net驅動程序的另一個「功能」

+3

這不是*,它的;最後,它抱怨 – thecoop 2009-10-06 14:35:03

+0

你不應該需要一個;執行這樣的陳述。至少我從來沒有需要反對甲骨文。 – mcauthorn 2009-10-06 16:16:12

1

我有這個問題,由於某種原因,你必須在一行代碼。 我有strSQL =「東西」+ 「更多東西」 我不得不把它放在一行。 strSQL =「東西更多東西」

它有些如何讀取cr/lf。

1

把你的sql換成開始塊。

Dim sqlInsert As String = "" 
For i = 1 To 10 
    sqlInsert += "INSERT INTO MY_TABLE (COUNT) VALUES (" & i & "); " 
Next 

Call ExecuteSql("BEGIN " & sqlInsert & " END;") 
相關問題