Dim cn As New SqlConnection("Data Source=(local);Initial Catalog=master;Integrated Security=True") 'Connect To Database
Dim myconnection As New SqlConnection("Data Source=(local);Initial Catalog=amlak;Integrated Security=True")
Try
myconnection.Open()
myconnection.Close()
Catch ex As Exception
Dim strsql As String = "CREATE DATABASE amlak COLLATE Persian_100_CI_AS"
Dim cmd2 As SqlCommand = New SqlCommand(strsql, cn)
cn.Open()
cmd2.ExecuteNonQuery()
cn.Close()
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = cn
Dim objReader As New System.IO.StreamReader("script.sql")
cmd.CommandText = objReader.ReadToEnd
cmd.CommandText = cmd.CommandText.Replace("GO", ";")
cmd.CommandText.Split(";")
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
Application.Restart()
End Try
存储过程是一个错误。
创建/更改程序'必须是查询批处理中的第一个语句。
带有返回值的RETURN语句不能在此上下文中使用。
关键字'程序'附近的语法不正确。
变量名称' @ cod'已经宣布。变量名在查询批处理或存储过程中必须是唯一的。 带有返回值的RETURN语句不能在此上下文中使用。
关键字'程序'附近的语法不正确。
变量名称' @ cod'已经宣布。变量名在查询批处理或存储过程中必须是唯一的。
带有返回值的RETURN语句不能在此上下文中使用。
答案 0 :(得分:0)
如果它确实是存储过程,那么我认为您不需要使用StreamReader。您只需要知道要调用的存储过程的名称,并将其设置为CommandText。
cmd.CommandText = "the name of your stored procedure"
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = cn
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
答案 1 :(得分:0)
只需替换GO;不管用。 您必须单独执行每个命令。 请注意,拆分操作的结果是一个数组。由于您没有将结果分配给变量,因此该行没有做任何有用的事情
cmd.CommandText.Split(";")
另外:用;替换GO;如果您确定脚本中没有其他GO实例,那么这只是一个好主意。 我建议你做这样的事情:
Dim cmds As String = File.ReadAllText(pFilename)
Dim queries As String()
queries = System.Text.RegularExpressions.Regex.Split(cmds, "^GO\s+$", RegularExpressions.RegexOptions.Multiline Or RegularExpressions.RegexOptions.IgnoreCase)
For Each curQuery In queries
cmd.CommandText = curQuery
cmd.ExecuteNonQuery()
Next