Так что я в основном хочу, чтобы вставить более одного запроса в мою базу данных, не требуя conn.close, чем conn.open слишком много раз, а также попробовать более 50 раз.
Здесь exp для кода:
Dim COMMAND As MySqlCommand
Dim reader As MySqlDataReader
Dim conn As MySqlConnection
Dim Item1 As String = "INSERT INTO item_template (entry, name, display) VALUES ('1234', 'Testing', '654';"
Dim Item3 As String = "UPDATE Item_template SET entry = '123' where name like 'test32111';"
Dim Item2 As String = "INSERT INTO item_template (entry, name, display) VALUES ('123467', 'Testing332', '65478';"
Try
conn.Open()
COMMAND = New MySqlCommand(Item1, conn)
reader = COMMAND.ExecuteReader
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Try
conn.Open()
COMMAND = New MySqlCommand(Item3, conn)
reader = COMMAND.ExecuteReader
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Try
conn.Open()
COMMAND = New MySqlCommand(Item2, conn)
reader = COMMAND.ExecuteReader
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Есть некоторые оптимизации, которые вы можете сделать. Вы должны вставлять одноразовые ресурсы в Использование-Statement. Оператор Using автоматически закрывает и удаляет ресурсы в конце. В частности, соединение будет закрыто автоматически. Он делает это, даже если блок-блок остается преждевременным из-за исключения или из-за того, что оператор Return завершает метод.
Держите соединение открытым во время обработки партии.
СУХОЙ: Не повторяй себя. Старайтесь избегать повторения кода с копией. В следующем примере я создаю массив текстов SQL, которые могут обрабатываться в цикле.
Команды SQL, такие как INSERT, UPDATE, DELETE, не возвращают набор результатов. Для них используйте ExecuteNonQuery
вместо ExecuteReader
.
Команду можно вернуть, назначив ей новый текст команды.
Dim sqlTexts = {
"INSERT INTO item_template (entry, name, display) VALUES ('1234', 'Testing', '654';",
"UPDATE Item_template SET entry = '123' where name like 'test32111';",
"INSERT INTO item_template (entry, name, display) VALUES ('12367', 'Testing332', '65478';"
}
Using _
conn As New MySqlConnection(connectionString),
command As New MySqlCommand With {
.CommandType = CommandType.Text,
.Connection = conn
}
conn.Open()
For Each sql As String In sqlTexts
Try
command.CommandText = sql
command.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Next
End Using
Обратите внимание, что оператор Using содержит command
а также мы используем функцию VB Implicit Line Continuation, как для инициализации массива sqlTexts
.
Без решения других вопросов, таких как параметризованные/подготовленные запросы, самое простое исправление должно быть...
Dim COMMAND As MySqlCommand
Dim conn As MySqlConnection
Dim Item1 As String = "INSERT INTO item_template (entry, name, display) VALUES ('1234', 'Testing', '654');"
Dim Item3 As String = "UPDATE Item_template SET entry = '123' where name like 'test32111';"
Dim Item2 As String = "INSERT INTO item_template (entry, name, display) VALUES ('123467', 'Testing332', '65478');"
Try
conn.Open()
COMMAND = New MySqlCommand("", conn)
COMMAND.CommandText = Item1
COMMAND.ExecuteNonQuery
COMMAND.CommandText = Item2
COMMAND.ExecuteNonQuery
COMMAND.CommandText = Item3
COMMAND.ExecuteNonQuery
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Мой VB немного ржавый, хотя, так что будьте осторожны ошибками опечатки уровня (я пытался добавить ;
более чем один раз)