代码之家  ›  专栏  ›  技术社区  ›  Kangkan

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

  •  2
  • Kangkan  · 技术社区  · 16 年前

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

    create database mydatabase
    Go
    
    Use mydatabase
    Go
    
    EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"  
    

    现在的问题是第一个执行的语句,但之后会出现错误。显示的错误是:“ syntax error near 'GO' Database 'mydatabase'does not exist. Make sure that the name is entered correctly. ".

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

    有人能帮我吗?

    2 回复  |  直到 16 年前
        1
  •  4
  •   andrei m    16 年前

    如你所见 http://technet.microsoft.com/en-us/library/aa258908%28SQL.80%29.aspx

    评论

    GO不是Transact-SQL语句;它 以及isql实用程序和SQL查询 分析仪。

    所以这就是使用.Net中的SqlCommand运行它时出现问题的原因。

    1) 逐条执行指令。可能在文件中使用分隔符,然后拆分SQL语句并使用for/foreach按顺序执行它们。

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

        2
  •  1
  •   dretzlaff17    16 年前

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

    例子:

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