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

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

谢谢,马丁

有帮助吗?

解决方案

马丁 - 我也遇到了同样的问题。我认为,当您加载一个或多个“ 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();
}

免责声明:我尚未测试上述代码,但它应该让您了解所需的内容:-)

其他提示

将TSQL语句分开的GO命令不是SQL命令,而是前端识别的语句。

因此,在将结果传递给命令对象之前,您需要将脚本分为几个命令。

我已经发送了多个语句,例如插入到;插入到(SQL Server中不需要半隆。

某些语句(例如创建函数)必须是“批次”中的第一个语句。在SSM和SQLCMD中,您有一个GO分离器,这是用于分离批次的客户端工具。这不是OLEDB功能,因此您必须单独发送它们 - 在串联或并行的单独调用中(取决于您的操作是否可以同时运行)。

如果您可以摆脱CCOMMAND,我想您可以启动SQLCMD,因为它支持GO批次分离器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top