无法通过ODP.NET执行SQL查询 - 无效的字符错误

时间:2009-10-06 11:01:48

标签: oracle odp.net ora-00911

我正在尝试通过ODP.NET执行SQL查询来创建表,但我总是得到一个ORA-00911'无效字符'错误。即使SQL查询本身没有换行符,异常中的Errors对象也始终具有文本“ORA-00911:无效字符\ n”。

我正在执行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 Developer

执行时可以正常工作

编辑:我正在执行的SQL是:

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

删除了换行符

5 个答案:

答案 0 :(得分:8)

Other people遇到过这个问题 - ODP.NET在文本命令中不支持多个SQL语句。解决方案是将它包装在PL / SQL块中,并在每个语句周围使用EXECUTE IMMEDIATE。这种缺乏支持;对我来说似乎非常愚蠢,并没有改善我对oracle开发团队的看法。

此外,这似乎是oracle本身的一个问题,因为我在MS和ODBC oracle客户端遇到了同样的问题。

答案 1 :(得分:1)

由于某种原因,我遇到了这个问题,你必须在一行上有代码。 我有strSQL =“stuff”+   “ 更多东西” 我不得不把它放在一条线上。 strSQL =“更多的东西”

有些人如何读取cr / lf。

答案 2 :(得分: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;")

答案 3 :(得分:0)

你的引用没问题(它只是强迫Oracle将你的对象名称视为区分大小写,即你写的方式大写)但我完全不确定你是否允许用这种方式定义NUMBER *

答案 4 :(得分:0)

我想知道是不是sql中的“*”你在创建时没有尝试过*的调用吗?我敢打赌它是ODP.Net驱动程序的另一个“功能”