ADO:使用连接和命令对象执行多个SQL

时间:2010-10-20 06:42:54

标签: ado.net

对于我的应用程序的特定安装,我需要从安装程序本身在SQL服务器上创建数据库和架构。我有一个自定义安装程序,通过它我可以检测并安装先决条件和软件。系统会提示用户提供数据库服务器的IP以及用户名和密码。在场景后面,我创建了一个连接和一个命令对象。我将查询保存在不同的文件中。我使用阅读器并读取文件的内容,并将文件的内容设置为命令对象的CommandText。该文件的典型内容如下:

create database mydatabase
Go

Use mydatabase
Go

EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"  

现在问题是第一个语句被执行但在此之后它会出错。显示的错误是:“syntax error near 'GO'”。我尝试删除GO语句,并尝试用分号结束sql语句。这种情况下的错误是“Database 'mydatabase'does not exist. Make sure that the name is entered correctly.”。

但是如果我在文件中保留一个语句,它就可以正常工作。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:4)

正如您在http://technet.microsoft.com/en-us/library/aa258908%28SQL.80%29.aspx

所见
  

说明

     

GO不是Transact-SQL语句;它   是osql识别的命令   和isql实用程序和SQL查询   分析器。

因此,当您使用.Net的SqlCommand运行它时,这就是您遇到问题的原因。 在我看来,你有两个选择:

1)逐个执行说明。也许在文件中使用分隔符,然后拆分SQL语句并使用for / foreach顺序执行它们。

2)使用SQL Server管理对象(SMO)中的Server类,它允许您执行包含“Go”语句的脚本。

答案 1 :(得分:1)

只需添加“;”即可执行多个sql命令语句在每个命令的末尾而不是“GO”语句。

示例:

cmd.CommandText = @" Update TableA Set ColumnA = 'Test' Where ID = 1;
                Update TableB Set ColumnA = 'Second line' Where ID = 2;
          ";