【发布时间】:2015-05-11 01:07:45
【问题描述】:
我正在尝试在 VB.NET 中完成一个过程,该过程制作 SQL 数据库的副本并创建所有数据库对象(表、函数和存储过程)。我可以成功创建数据库,对于表,我使用以下代码从文本文件加载脚本:
Dim strConnection As String = myConnectionString
Dim objCon As New SqlConnection(strConnection)
Dim objCmd As SqlCommand = Nothing
Dim sr As StreamReader = Nothing
Dim sb As System.Text.StringBuilder = Nothing
Dim line As String = ""
Dim ScriptFileNames(5) As String
Dim i As Integer
Dim filename As String
ScriptFileNames(1) = "CreateTables.sql"
ScriptFileNames(2) = "CreateStoredProcedures.sql"
ScriptFileNames(3) = "CreateFunctions.sql"
For i = 1 To 1
filename = SysConfig.DBScriptLocation & ScriptFileNames(i)
sr = New StreamReader(filename)
sb = New System.Text.StringBuilder
Do While sr.Peek() <> -1
line = sr.ReadLine()
If (line = "GO" Or line Is Nothing Or line Is System.DBNull.Value) Then
' do nothing
Else
If line Is System.DBNull.Value Then
sb.Append(ControlChars.CrLf & " ")
Else
sb.Append(ControlChars.CrLf & line)
End If
End If
Loop
' Create the database
objCon.Open()
objCmd = objCon.CreateCommand()
' Execute
objCmd.CommandText = sb.ToString
objCmd.ExecuteNonQuery()
objCon.Close()
Next
这对所有表都很有效,但对于存储过程总是很糟糕。我的文本文件如下所示:
创建过程 [dbo].[InsertDeal]( @DealID 为 int)
作为
开始
插入表 1(DealID、LoanID) 选择 @DealID 作为 DealID、LOAN_ID FROM ImportedLoans
插入表 2(DealID、LoanID) 选择 @DealID 作为 DealID、LOAN_ID FROM ImportedLoans
结束
创建过程 SProc2 作为 开始 SProc2 的代码..... 结束
创建过程 SProc23 作为 开始 SProc3 的代码..... 结尾 等等等等
我的代码在“GO”上爆炸,所以我删除了“GO”语句,但它仍然没有运行,并且我收到关于 @DealID 未定义的消息。
任何帮助将不胜感激。谢谢
【问题讨论】:
-
这是故意的——
For i = 1 To 1?您只是在阅读您的表格脚本,而不是其他脚本。 -
是的,I=1 到 1 是故意的,因为它一直在轰炸其他文件。
标签: sql-server vb.net stored-procedures