【发布时间】:2016-03-21 18:01:38
【问题描述】:
我在 vb.net 中运行以下循环,超过 1000 次迭代发出 1000 次更新命令:
Dim updateRoute As String = "UPDATE [Routes] SET [matching_route_id] = ? WHERE [ID] = ?"
Using transaction As OleDbTransaction = myconnection.BeginTransaction()
Dim id As Integer
For Each id In ids
Using cmd2 As New OleDbCommand(updateRoute, myconnection)
cmd2.Parameters.AddWithValue("?", id)
cmd2.Parameters.AddWithValue("?", id)
cmd2.ExecuteNonQuery()
End Using
Next
transaction.Commit()
End Using
但我得到以下异常
ExecuteNonQuery 要求命令有一个事务,当 分配给命令的连接处于挂起的本地事务中。 该命令的 Transaction 属性尚未初始化。
这似乎告诉我,我需要在 cmd2 的每次迭代中开始交易。对我来说,这消除了使用交易的任何理由——因为我想把它作为一个大批量来做。即,事务应该在第一个 UPDATE 之前开始并在最后一个 UPDATE 语句结束。
所以我想我的问题有两个方面:
- 如何让 vb.net 在循环之前接受我的交易
- 或者,我如何运行这样的大批量更新。目前,一次更新一行几乎太慢了。
【问题讨论】:
-
每次迭代都不需要新命令,只需要新的参数值
标签: c# .net vb.net transactions ado.net