【发布时间】:2009-11-27 18:08:15
【问题描述】:
我使用 .Net 2.0、ADO.NET、一个数据集和数据适配器来管理我的数据,并使用 Microsoft SQL Server 2005 作为数据库管理器。
我有一个应用程序可以生成大量结果 (500K+) 并将它们保存在数据库中。如果一个结果生成失败,我不想保存任何结果。因此,我将所有数据库插入放入一个事务中,如果无法生成结果,该事务将回滚。
但是,在写入所有结果之前,表格会被锁定,这不是我想要的。或者至少我猜它被锁定了,在插入结束之前没有 SELECT 查询响应。
有没有办法让事务在事务处于活动状态时不锁定表?
使用进行如此多插入的事务是否是个好主意?
【问题讨论】:
-
在处理如此多的行时,您可能需要考虑使用 DataSets 和 DataAdapters 以外的机制。与其他技术相比,它们默认的一次一行的行为可能非常慢。
-
@RickNZ 除了编写我自己的查询和执行 SQLCommand 之外,.Net 2.0 中还有什么可用的?
-
@Wilhelm 你可以试试 SqlBulkCopy,在使用 TableLock 函数时,它的性能比表适配器好得多(尽管仍然不够出色)。
-
eep,我的意思是“选项”,而不是“功能”。
标签: .net sql-server sql-server-2005 ado.net transactions