ВСТАВИТЬ более 50 запросов, используя одно и то же открытое соединение

0

Так что я в основном хочу, чтобы вставить более одного запроса в мою базу данных, не требуя 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
  • 0
    Вы можете использовать процедуру вместо
  • 0
    вставить несколько строк: stackoverflow.com/a/452934/832052
Показать ещё 16 комментариев
Теги:

2 ответа

0
Лучший ответ

Есть некоторые оптимизации, которые вы можете сделать. Вы должны вставлять одноразовые ресурсы в Использование-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.

  • 0
    Большое спасибо ! Я просто не могу принять оба ответа, или это возможно, потому что ты замечательный, а другой тоже хорош! Спасибо ;)
  • 0
    Вам решать, какой ответ поможет вам больше всего.
Показать ещё 4 комментария
1

Без решения других вопросов, таких как параметризованные/подготовленные запросы, самое простое исправление должно быть...

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 немного ржавый, хотя, так что будьте осторожны ошибками опечатки уровня (я пытался добавить ; более чем один раз)

  • 0
    Спасибо, на самом деле просто удалите dim reader как mysqldatareader: D, так как он не нужен :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню