可以使用 OLE DB 运行多个命令或 sql 脚本吗?例如运行 sql 脚本来创建数据库及其结构(表、索引、存储过程...)。
当我使用 CCommand 类时,我只能运行一个命令。如何使用多个命令运行 SQL 脚本?
谢谢,马丁
可以使用 OLE DB 运行多个命令或 sql 脚本吗?例如运行 sql 脚本来创建数据库及其结构(表、索引、存储过程...)。
当我使用 CCommand 类时,我只能运行一个命令。如何使用多个命令运行 SQL 脚本?
谢谢,马丁
分隔 TSQL 语句的 GO 命令不是 SQL 命令,而是只被前端识别的语句。
因此,在将结果传递给命令对象之前,您需要在 "\nGO" 处显式地将脚本拆分为多个命令。
马丁 - 我也有同样的问题。我假设当您加载一个包含一个或多个“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();
}
免责声明:我没有测试上面的代码,但它应该让你知道需要什么:-)
我已经发送了多个语句,例如 INSERT INTO;INSERT INTO(SQL Server 中不需要分号。
某些语句(如 CREATE FUNCTION)必须是“批处理”中的第一个语句。在 SSMS 和 sqlcmd 中,您有一个 GO 分隔符,它是用于分隔批次的客户端工具。这不是 OLEDB 功能,因此您必须单独发送它们 - 在单独的串行或并行调用中(取决于您的操作是否可以同时运行)。
如果您可以摆脱 CCommand,我想您可以启动 sqlcmd,因为它支持 GO 批处理分隔符。