Я написал консольное приложение в VB.NET для работы с базой данных, и возникла странная ошибка во время выполнения ...
Вот основной код:
Sub Main(ByVal args() As String)
Try
user = args(0)
batchID = args(1)
GetBatchRevision()
'batchRev = 1
Dim getTestScripts As SqlCommand = New SqlCommand("GetTestScriptsInTestBatch", cs)
getTestScripts.CommandType = CommandType.StoredProcedure
Dim batchIDParam As SqlParameter = getTestScripts.Parameters.Add("@batchID", SqlDbType.Int, 4)
Dim batchRevParam As SqlParameter = getTestScripts.Parameters.Add("@batchRev", SqlDbType.Int, 4)
'batchIDParam.Value = 1
'batchRevParam.Value = 1
batchIDParam.Value = batchID
batchRevParam.Value = batchRev
Console.WriteLine(batchID & " " & batchRev)
Console.WriteLine(cs.State)
Console.ReadLine()
Using cs
cs.Open()
Dim reader As SqlDataReader = getTestScripts.ExecuteReader(CommandBehavior.CloseConnection)
While reader.Read()
Console.WriteLine("Executing Test Script " & reader("ScriptID").ToString() & " Revision " & reader("ScriptRev").ToString)
End While
Console.ReadLine()
End Using
Catch ex As Exception
End Try
End Sub
GetBatchRevision:
Private Sub GetBatchRevision()
Using cs
Dim GetNewestRev As New SqlCommand("SELECT Max(BatchRev) FROM TestBatch WHERE BatchID=" & batchID, cs)
cs.Open()
Dim reader As SqlDataReader = GetNewestRev.ExecuteReader(CommandBehavior.CloseConnection)
reader.Read()
If Not IsDBNull(reader(0)) Then
batchRev = reader(0).ToString()
End If
End Using
End Sub
batchRev
и batchID
являются глобальными переменными внутри модуля.
Поведенческий:
- Приложение выводит «1» (пользовательский ввод), «1» (результат базы данных), «0» (перечисление закрытого соединения)
- Когда я нажимаю Введите , чтобы пройти первый
Console.ReadLine()
, приложение просто закрывается.
Если я закомментирую GetBatchRevision
и сразу установлю batchRev = 1
, я получу вышеуказанный результат, а также «Выполнение сценария теста 1 редакция 52», «Выполнение сценария теста 2 редакция 66», которые являются ожидаемыми результатами от сохраненного процедура GetTestScriptsInTestBatch
.
Глобальные переменные декларируются следующим образом:
Private batchID As String
Private batchRev As String
Есть идеи, почему GetBatchRevision()
вызывает сбой приложения? Сам по себе (удаляя сохраненную часть кода proc), он выполняется просто отлично. Первоначально я предполагал, что было зависшее соединение, но завершение блока «using» должно закрыть соединение SQL, а также все открытые программы чтения, связанные с указанным соединением (как упоминалось ранее, cs.State возвращает 0).