Почему точка с запятой не может быть помещена в CommandText OracleCommand, когда C #

4

почему точка с запятой (';') не может размещаться в CommandText OracleCommand, когда С#

просто лизать ниже

string sql = "select * from table1;";
OracleCommand oc = new OracleCommand(sql , con);
oc.CommandType = CommandType.Text;
oc.ExecuteNonQuery();

результат окажется ошибкой.

почему? может ли кто-нибудь сказать мне причину?

  • 0
    это не часть запроса.
  • 2
    Очевидно, Oracle (или поставщик Oracle) автоматически добавит точку с запятой для вас.
Теги:
ado.net
command
semicolon

1 ответ

9
Лучший ответ

В комментариях мы разработали для вас ответ. Просто вы получите официальный ответ, вот он с сайта OracleOverflow (см. Ниже):

OracleCommmand может запускать только 1 sql или plsql-инструкцию за раз. Нет необходимости разделять несколько операторов.

Точка с запятой является частью документации для разделения нескольких операторов. Он не является частью одного заявления DDL. Для OracleCommand нет необходимости добавлять точку с запятой, поскольку она может обрабатывать только один оператор за раз.

Изменить: Это была исходная ссылка, которая теперь мертва: http://www.oracleoverflow.com/questions/145/running-ddl-through-an-oraclecommand-without-the-semicolon

Альтернатива: http://web.archive.org/web/20100806014022/http://www.oracleoverflow.com/questions/145/running-ddl-through-an-oraclecommand-without-the-semicolon

Вопрос:

При попытке запустить серию DDL-команд через OracleCommand объект, я получаю ошибку "неправильный символ" ORA-00911, если я включаю конечная точка с запятой, хотя это часть синтаксиса SQL в документация. Это также означает, что вы можете выполнять только SQL-код за один раз, вместо того, чтобы выполнять весь SQL script сразу, что кажется мне очень странным.

После небольшого поискового запроса я обнаружил, что обходным путем является обертывание DDL в EXECUTE IMMEDIATE PL/SQL-заявлении, но снова он терпит неудачу, если DDL имеет точку с запятой в конце (кроме операторов создания PL/SQL, которые требуют точку с запятой).

Кто-нибудь знает причину такого поведения? Точка с запятой находится в синтаксическая документация, поэтому я бы предположил, что это всегда требуется, но он терпит неудачу, если точка с запятой включена...

Ответ здесь:

OracleCommmand может запускать только 1 sql или plsql-инструкцию за раз. Нет необходимости разделять несколько операторов.

Точка с запятой является частью документации для разделения нескольких операторов. Он не является частью одного заявления DDL. Для OracleCommand нет необходимости добавлять точку с запятой, поскольку она может обрабатывать только одну точку за раз.

ДОБАВЛЕНО: вы можете связать несколько заявлений с BEGIN... END; Блок (да, это заканчивается точкой с запятой). Но эти утверждения должны быть DML, DDL или PL/SQL вызовы функций. Вы не можете объединить несколько SELECT в BEGIN... END; Блок.

Комментарии:

Почему OracleCommand имеет это ограничение только на возможность запускать 1 инструкцию за раз?

Он основан на спецификации DbCommand в ADO.Net. Это не ограничение только OracleCommand.

SqlCommand допускает несколько операторов в одной команде, которая должна быть просто "добавлением" для SQL Server.

  • 0
    Спасибо вам всем. Я наконец-то заканчиваю вызовом процесса sqlplus. Сначала я пробую блок «конец конца», но с оператором выбора, и получаю ошибку. Еще раз спасибо, дайте мне знать, что теперь это поможет.
  • 0
    OracleOverflow не найден
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню