我不是 C# 专家,但我喜欢玩任何与 SQL 服务器相关的东西。
对我来说,您将 ADO 数据表锁定在内存中。由于您没有发布其余代码,因此我无法判断这是否与 SQL Server 表相关联。我敢打赌,它是。
消息表明底层数据已被修改。
一个批量复制过程是否会踩到另一个?
查看 ConcernedOfTunbridgeWells 的条目以获得良好的编码风格 -
Best Practices for uploading files to database
我的主要问题是你为什么每 10 秒做一次?
在这种频率下,会想到一些事情。
1 - 您使用的是没有索引和完整性的临时表。如果数据量很大,重建索引需要时间。
2 - 底层 SqlBulkCopy 类对锁做了什么。 TABLOCK 可能会导致阻塞。
如果您有数据库的系统管理员访问权限,这里有一些简单的命令可以查看锁。
--
-- Locked object details
--
-- Old school technique
EXEC sp_lock
GO
-- Lock details
SELECT
resource_type, resource_associated_entity_id,
request_status, request_mode,request_session_id,
resource_description
FROM sys.dm_tran_locks
WHERE resource_database_id = DB_ID('AdventureWorks2012')
GO
-- Page/Key details
SELECT object_name(object_id) as object_nm, *
FROM sys.partitions
WHERE hobt_id = 72057594047037440
GO
-- Object details
SELECT object_name(1266103551)
GO
批量复制上的 Tech Next sn-p。
http://technet.microsoft.com/en-us/library/ms130809.aspx
TABLOCK:在大容量复制操作期间获取表级锁。此选项显着提高了性能,因为仅在大容量复制操作期间持有锁可减少表上的锁争用。如果表没有索引并且指定了 TABLOCK,则可以由多个客户端同时加载表。默认情况下,锁定行为由表选项 table lock on bulk load 确定。
总而言之,尝试增加 BULK COPY 操作之间的时间。看看错误是否消失。