在一个VB命令中运行批处理SQL脚本

时间:2016-02-03 15:23:21

标签: sql sql-server vb.net

我正在尝试创建一个程序,这样我就可以在不安装SSMS的情况下运行批处理SQL脚本。

我制作了一个适用于单个查询的基本程序。

 If MsgBox("Are you sure you want to execute this code?", MsgBoxStyle.YesNoCancel, "Are you sure?") = MsgBoxResult.Yes Then


            Dim cmd As New SqlClient.SqlCommand()
            Dim connetionString As String
            Dim conn As SqlConnection
            Dim sql As String


            connetionString = "Data Source=Localhost\database;Initial Catalog=master;Integrated Security=True"
            conn = New SqlConnection(connetionString)
            sql = RTB_Sql.Text


            Try
                conn.Open()
                cmd.CommandText = sql
                cmd.Connection = conn
                cmd.ExecuteNonQuery()  'execute query
                'AddHandler conn.InfoMessage, New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)


            Catch sqlEx As SqlException
                MsgBox(sqlEx.Message)
                conn.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                conn.Close()
            End Try
        Else
        End If

rtb_sql.text是一个包含用户SQL的文本框

我希望这个程序使用Variables,Joins,Updates和If语句来运行批处理语句,但它不能很好地处理它,最终会出错。

SSMS中的代码是合理的,但在此程序中则不然。是否可以将sql声明为其他可能的东西?

由于

有人可以建议解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

SSMS与您的应用程序之间的最大区别在于SSMS可以批量解析SQL语句,并且您的应用程序将所有语句作为单个命令发送。

因此,在您的应用程序中输入多个语句时,绝对有必要使用分号终止批处理中的每个语句。

例如,此输入将在SSMS中起作用,但可能会导致应用程序出错:

DECLARE @id int
INSERT INTO MyTable (MyColumn) VALUES ('x')
SET @id = @@IDENTITY
SELECT @id

但是这段代码适用于:

DECLARE @id int;
INSERT INTO MyTable (MyColumn) VALUES ('x');
SET @id = @@IDENTITY;
SELECT @id;

没有简单的方法可以解决这个问题。这将是用户培训的问题。