2009-10-06 67 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;") 
相关问题