Я создаю WinService в VB.NET, чтобы получить некоторые данные из таблицы, сделать некоторые вещи с этими данными, а затем загрузить новые данные в эту таблицу. Что мне нужно что-то вроде этого:Выполнение нескольких хранимых процедур в VB.NET
Dim conn As New MySqlConnection(my_connString)
conn.Open()
Dim cmd As New MySqlCommand("my_Stored_Procedure_1", conn)
cmd.CommandType = CommandType.StoredProcedure
Dim reader As MySqlDataReader = cmd.ExecuteReader()
While reader.Read()
Try
' SP to SELECT Data from DB table '
Dim columnData As String
columnData = reader("ColumnName")
columnData_2 = reader("ColumnName_2")
' (...) Do something with this Data '
Try
' SP to UPDATE Data into the same DB table '
'cmd.Dispose() '
cmd = New MySqlCommand("my_Stored_Procedure_2", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.ExecuteReader()
' (...) Do something else '
Catch ex As Exception
Console.WriteLine("ERROR: " & ex.Message)
End Try
Catch ex As Exception
Console.WriteLine("ERROR: " & ex.Message)
End Try
End While
reader.Close()
conn.Close()
Проблема заключается в том, что это не работает. Он говорит: Уже открыт DataReader, связанный с этим соединением, который должен быть закрыт первым. Итак, я попытался создать различные команды SQL, закрыть и повторно открыть соединение и создать различные подключения, например, предложенные here, но все они без успеха. Класс This кажется полезным, но это много кода для простой (?) Задачи. Я прочитал много подобных вопросов, но пока не нашел того, что мне нужно.
Как я могу справиться с этой проблемой? Некоторая помощь будет приятной.
Вы рассматривали возможность создания отдельного идентификатора для команды в цикле? И вы не назначаете читателю внутреннего командного объекта на что-либо. – Uueerdo
Эти объекты БД не удаляются, как и должны быть. внешняя часть имеет открытый читатель, который вы повторяете, который ассоциируется с ** объектом команды **. Внутри цикла While вы пытаетесь использовать повторно * тот же * командный объект с хранимой процедурой, и все, что происходит в * Сделайте что-то еще *. Не пытайтесь использовать один и тот же командный объект одновременно для нескольких задач. – Plutonix
Я попытался использовать 'cmd.Dispose()' или создать разные объекты команд, но я не смог заставить это работать. – mafap