1

可以使用 OLE DB 运行多个命令或 sql 脚本吗?例如运行 sql 脚本来创建数据库及其结构(表、索引、存储过程...)。

当我使用 CCommand 类时,我只能运行一个命令。如何使用多个命令运行 SQL 脚本?

谢谢,马丁

4

3 回答 3

3

分隔 TSQL 语句的 GO 命令不是 SQL 命令,而是只被前端识别的语句。

因此,在将结果传递给命令对象之前,您需要在 "\nGO" 处显式地将脚本拆分为多个命令。

于 2010-06-27T12:26:53.070 回答
2

马丁 - 我也有同样的问题。我假设当您加载一个包含一个或多个“go”的脚本时会出现错误?

我过去曾使用 SQL DMO 来运行带有 GO 的脚本。这确实需要在您的目标计算机上安装 SQLDMO。

另一种选择是使用 .NET "String.Split("GO")" 函数,并循环生成的字符串数组,逐个执行它们。

像这样:

StreamReader file = File.OpenText("c:\\MyScript.sql");
SqlConnection conn = new SqlConnection("My connection string here...");
string fullCommand = file.ReadToEnd();
string[] splitOptions = new string[] {"go", "GO", "gO", "Go" };
foreach (string individualCommand in fullCommand.Split(splitOptions, StringSplitOptions.RemoveEmptyEntries))
{
    SqlCommand comm = new SqlCommand(individualCommand, conn);
    comm.ExecuteNonQuery();
}

免责声明:我没有测试上面的代码,但它应该让你知道需要什么:-)

于 2010-06-27T12:32:12.800 回答
1

我已经发送了多个语句,例如 INSERT INTO;INSERT INTO(SQL Server 中不需要分号。

某些语句(如 CREATE FUNCTION)必须是“批处理”中的第一个语句。在 SSMS 和 sqlcmd 中,您有一个 GO 分隔符,它是用于分隔批次的客户端工具。这不是 OLEDB 功能,因此您必须单独发送它们 - 在单独的串行或并行调用中(取决于您的操作是否可以同时运行)。

如果您可以摆脱 CCommand,我想您可以启动 sqlcmd,因为它支持 GO 批处理分隔符。

于 2010-06-27T12:24:34.710 回答