我想使用SqlBulkCopy将数据批量加载到SQL 2008表中。我计划从多个客户端并行加载数据。
但是我想模拟加载数据的延迟,以便我可以检查数据库中的锁并检查并发问题。我通常使用Thread.Sleep()来模拟一个长时间运行的进程,但我不确定它是否使用SQLBulkCopy。
using (SqlBulkCopy s = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock))
{
s.DestinationTableName = "HoldTable";
s.WriteToServer(dataTable);
System.Threading.Thread.Sleep(1000000);
s.Close();
}
答案 0 :(得分:0)
默认情况下,SqlBulkCopy.WriteToServer
在事务外运行。这意味着它将在WriteToServer
函数返回之前释放任何锁。 Sleep
期间不会有任何数据库锁定。
您可以通过指定third parameter到SqlBulkCopy
的构造函数来使用事务。请参阅this MSDN article for examples。
事务保持锁定,直到您提交它为止。因此,如果您在提交之前放置Sleep
,则应该进行有用的模拟。