База данных Jet (ms доступ) ExecuteNonQuery - Могу ли я сделать это быстрее? - PullRequest
2 голосов
/ 25 мая 2010

У меня есть эта общая подпрограмма, которую я написал, которая берет список строк sql и выполняет их для базы данных. Есть ли способ, как я могу сделать это быстрее? Обычно он может видеть 200 вставок, удалений или обновлений одновременно. Иногда возникает смесь обновлений, вставок и удалений. Было бы хорошей идеей разделить запросы по типу (то есть группа вставляет вместе, затем обновляет и затем удаляет)?

Я запускаю это для базы данных ms access и использую vb.net 2005.

Public Function ExecuteNonQuery(ByVal sql As List(Of String), ByVal dbConnection as String) As Integer
If sql Is Nothing OrElse sql.Count = 0 Then Return 0

Dim recordCount As Integer = 0

Using connection As New OleDb.OleDbConnection(dbConnection)
    connection.Open()
    Dim transaction As OleDb.OleDbTransaction = connection.BeginTransaction()

    'Using cmd As New OleDb.OleDbCommand()
    Using cmd As OleDb.OleDbCommand = connection.CreateCommand
        cmd.Connection = connection
        cmd.Transaction = transaction

        For Each s As String In sql
            If Not String.IsNullOrEmpty(s) Then
                cmd.CommandText = s
                recordCount += cmd.ExecuteNonQuery()
            End If
        Next

        transaction.Commit()
    End Using
End Using

Return recordCount

Функция завершения

1 Ответ

1 голос
/ 26 мая 2010

Вы можете использовать адаптер данных для обновления всего набора данных одновременно. Выполнять запросы к объекту ADO будет быстрее, чем напрямую к базе данных. После циклического выполнения обновления обновите весь набор данных. Это может быть быстрее, но потребует некоторого дополнительного кодирования в приложении и наверху.

...