Невозможно выполнить SQL-запрос через ODP.NET - ошибка недопустимого символа - PullRequest
3 голосов
/ 06 октября 2009

Я пытаюсь выполнить SQL-запрос через ODP.NET для создания таблицы, но я всегда получаю ошибку ORA-00911 «недопустимый символ». Объект «Ошибки» в исключении всегда имеет текст «ORA-00911: недопустимый символ \ n», даже если в самом запросе 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 Developer

РЕДАКТИРОВАТЬ: SQL я выполняю это:

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

с удаленными переносами строк

Ответы [ 5 ]

8 голосов
/ 06 октября 2009

Другие люди сталкивались с этой проблемой - ODP.NET не поддерживает несколько операторов SQL в текстовой команде. Решение состоит в том, чтобы обернуть его в блок PL / SQL с помощью команды EXECUTE IMMEDIATE вокруг каждого оператора. Это отсутствие поддержки; мне кажется невероятно тупым, и это не улучшило мое мнение о команде разработчиков Oracle.

Кроме того, похоже, что это проблема самого оракула, поскольку у меня те же проблемы с клиентами Oracle и ODBC.

1 голос
/ 02 июля 2013

Оберните ваш sql в Начало блок.

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

Call ExecuteSql("BEGIN " & sqlInsert & " END;")
1 голос
/ 03 мая 2012

У меня была эта проблема, по какой-то причине у вас должен быть код в одной строке. У меня был strSQL = "материал" + " больше вещей" Я должен был поместить это в одну линию. strSQL = "вещи больше вещей"

Это как-то читает cr / lf.

0 голосов
/ 06 октября 2009

Интересно, если это "*" в sql, вы пробовали вызов без * при создании? Могу поспорить, что это еще одна «особенность» драйвера ODP.Net

0 голосов
/ 06 октября 2009

Ваши кавычки в порядке (это просто заставляет Oracle обрабатывать имена ваших объектов как чувствительные к регистру, то есть в верхнем регистре так, как вы это написали), но я совсем не уверен, что вам разрешено определять NUMBER таким образом с *.

...