C# 为什么当C

C# 为什么当C,c#,oracle,ado.net,C#,Oracle,Ado.net,为什么用分号“;”当C 如下图所示: string sql = "select * from table1;"; OracleCommand oc = new OracleCommand(sql , con); oc.CommandType = CommandType.Text; oc.ExecuteNonQuery(); 结果将是一个错误 为什么??有谁能告诉我原因吗?在评论中,我们已经为您找到了答案。您可以从OracleOverflow网站获得正式答案,请参见以下内容: OracleCom

为什么用分号“;”当C

如下图所示:

string sql = "select * from table1;";
OracleCommand oc = new OracleCommand(sql , con);
oc.CommandType = CommandType.Text;
oc.ExecuteNonQuery();
结果将是一个错误


为什么??有谁能告诉我原因吗?

在评论中,我们已经为您找到了答案。您可以从OracleOverflow网站获得正式答案,请参见以下内容:

OracleCommmand一次只能运行1条sql或plsql语句。不需要分隔多个语句

分号是分隔多个语句的文档的一部分。它不是单个DDL语句的一部分。对于OracleCommand,不需要附加分号,因为它一次只能处理一条语句

编辑:这是原始链接,现在已失效:

备选方案:

问题:

尝试通过OracleCommand运行一系列DDL命令时 对象,如果我包含 最后的分号,即使这是 文档这还意味着您只能执行SQL 1 语句,而不是一次执行整个SQL脚本, 我觉得这很奇怪

在谷歌搜索了一段时间后,我发现一个解决方法是包装DDL 在executeimmediate PL/SQL语句中,但如果 除了PL/SQL create语句之外,DDL在末尾有一个分号, 它需要分号

有人知道这种行为的原因吗?分号在中间 语法文档,所以我假设它总是 必需,但如果包含分号,则会失败

请回答:

OracleCommmand一次只能运行1条sql或plsql语句。 不需要分隔多个语句

分号是分隔多个语句的文档的一部分。 它不是单个DDL语句的一部分。那里有一个OracleCommand 不需要附加分号,因为它只能处理一个分号 一次声明一个声明

添加:您可以将多个语句绑定到BEGIN。。。终止 Block yes,以分号结尾。但这种说法应该是正确的 DML、DDL或PL/SQL函数调用。您不能绑定多个SELECT 语句变成一个开始。。。终止街区

评论:

为什么OracleCommand一次只能运行一条语句

它基于ADO.Net中的DbCommand规范。这不仅仅是OracleCommand的限制


SqlCommand允许在一个命令中使用多个语句,这必须是SQL Server的“添加”。

显然,Oracle或Oracle提供程序会自动为您添加分号。谢谢大家。我最终通过调用sqlplus进程来完成它。我开始尝试“开始-结束”块,但使用select语句,结果失败。再次感谢您让我知道这一点,从现在起这将是有帮助的found@Kiquenet:很遗憾,该站点已消失,没有任何踪迹。这是一个很好的例子,说明了为什么在这里包含内容是好的,而不是依赖可能消失的链接。