почему точка с запятой (';') не может размещаться в CommandText OracleCommand, когда С#
просто лизать ниже
string sql = "select * from table1;";
OracleCommand oc = new OracleCommand(sql , con);
oc.CommandType = CommandType.Text;
oc.ExecuteNonQuery();
результат окажется ошибкой.
почему? может ли кто-нибудь сказать мне причину?
В комментариях мы разработали для вас ответ. Просто вы получите официальный ответ, вот он с сайта OracleOverflow (см. Ниже):
OracleCommmand может запускать только 1 sql или plsql-инструкцию за раз. Нет необходимости разделять несколько операторов.
Точка с запятой является частью документации для разделения нескольких операторов. Он не является частью одного заявления DDL. Для OracleCommand нет необходимости добавлять точку с запятой, поскольку она может обрабатывать только один оператор за раз.
Изменить: Это была исходная ссылка, которая теперь мертва: 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.