Var*_*rpi 6 .net .net-4.0 linq-to-sql
我使用Linq to SQL与SQL Server 2008 SP2,我的应用程序是WinForm .net 4我导入到SQL Server 200,000记录.我正在创建对象并将它们附加到"insertonsubmit"上的datacontext.然后我每100条记录做"submitChanges".我什么都没有交易.
我收到这个错误
"This SqlTransaction has completed; it is no longer usable." with stack
at System.Data.SqlClient.SqlTransaction.ZombieCheck()
at System.Data.SqlClient.SqlTransaction.Rollback()
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
Run Code Online (Sandbox Code Playgroud)
出乎意料.该错误不一致,可能出现在10,000条记录或27,200条记录或XXX条记录之后.
因为错误似乎是随机的,所以我认为它与垃圾收集有关...
有人有线索吗?
SubmitChanges有隐式交易。这里的问题是你的交易超时了——你只是做得太多了。对于 200k 行,我将使用SqlBulkCopy到临时表中,然后运行命令或 SPROC 将这 200k 行移动到实际表中;也许在事务中使用该命令/SPROC。
SqlBulkCopy是专为这种情况设计的- 它是一个连续流或原始 TDS 数据,而不是然而可能的往返 - 并且在服务器端它也进行了优化(但因此,您必须使用临时表,否则您将面临风险插入未记录)。
| 归档时间: |
|
| 查看次数: |
5069 次 |
| 最近记录: |