2

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

終了機能

4

1 に答える 1

1

データ アダプターを使用して、データセット全体を一度に更新できます。データベースに対して直接クエリを実行するよりも、ADO オブジェクトに対してクエリを実行する方が高速です。バッチが循環した後、データセット全体を更新します。その方が高速かもしれませんが、前もって追加のコーディングが必要になり、アプリケーションのオーバーヘッドが生じます。

于 2010-05-26T00:19:22.430 に答える