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

在一个VB命令中运行批处理SQL脚本,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我正在尝试制作一个程序,以便在不安装SSM的情况下运行批处理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

我正在尝试制作一个程序,以便在不安装SSM的情况下运行批处理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的文本框

我希望这个程序使用变量、连接、更新和If语句运行批处理语句,但是它不能很好地处理它,最终会出错

这些代码在SSMS中是正确的,但在此程序中不是。是否可以将
sql
声明为其他内容

谢谢

有人能提出解决办法吗


谢谢

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;

没有一个简单的方法来编码你的方法。这将是一个用户培训问题。

您会遇到什么错误?@variablename已经存在,尽管代码中存在“开始”和“结束”。嵌入式GOs如何?我不确定他们是否可以不经过特殊处理就处理。我记不得了。尝试使用分号和不使用分号,看看会发生什么。@TabAlleman-这两种方法都有效,但我将使用分号,看看这是否能解决问题。