ずいぶん前にこの質問についてコメントしたことを覚えていますが、最近、私のショップの何人かの開発者が TransactionScope を使い始め、パフォーマンスの問題にも遭遇しました。いくつかの情報を検索しようとしているときに、これは Google 検索結果のかなり上位に表示されました。
私たちが遭遇した問題は、明らかに、BeginChainを使用したコマンド (INSERT など) のチェーンが、 TransactionScopeを使用している場合に機能しないことでした(少なくとも、実行しているバージョンでは、クライアント v9.7.4.4 は DB2 z/OS v 10 に接続しています)。 )。
私たちが遭遇した問題 (TransactionScope で [1k+] の INSERT を実行するとパフォーマンスが低下するが、スコープを削除して連鎖を許可すると問題なく動作する) の回避策を残しておこうと思いました。元の質問に直接役立つかどうかはよくわかりませんが、DB2DataAdapter と基礎となる DataTable を使用して行を更新できる IBM.Data.DB2.dll クラスを調べると、いくつかのオプションがあります。
VB.NET のコード例を次に示します。
Private Sub InsertByBulk(tableName As String, insertCollection As List(Of Object))
Dim curTimestamp = Date.Now
Using scope = New TransactionScope
'Something that opens a connection to DB2, may vary
Using conn = GetDB2Connection()
'Dumb query to get DataTable from the ResultSet
Dim sql = String.Format("SELECT * FROM {0} WHERE 1=0", tableName)
Using adapter = New DB2DataAdapter(sql, conn)
Using table As New DataTable
adapter.FillSchema(table, SchemaType.Source)
For Each item In insertCollection
Dim row = table.NewRow()
row("ID") = item.Id
row("CHAR_FIELD") = item.CharField
row("QUANTITY") = item.Quantity
row("UPDATE_TIMESTAMP") = curTimestamp
table.Rows.Add(row)
Next
Using bc = New DB2BulkCopy(conn)
bc.DestinationTableName = tableName
bc.WriteToServer(table)
End Using 'BulkCopy
End Using 'DataTable
End Using 'DataAdapter
End Using 'Connection
scope.Complete()
End Using
End Sub