我们在CLR过程中有一个内存DataTable。在进行大量处理之后,DataTable需要将大量数据加载到数据库中的表中。不幸的是,因为我们使用context connection SqlBulkCopy将无法工作(抛出错误:请求的操作在上下文连接上不可用 outline of context restrictions)。
我们正在考虑建立一个额外的常规连接并使用它来执行SQLBulkCopy。考虑到使用regular connection over a context connection的开销,这似乎相当愚蠢。我们已经考虑过对DataTable中的行进行迭代并为每个行插入一条记录,但它的大小很大,而且SQLBulkCopy看起来更合适。
我们没有与DataTable结合,只是在寻找从CLR程序将大量数据插入数据库的最佳方法。关于DataTable的最后一点,它代表了一个底层数据库表,但没有通过DataSet或TableAdapter绑定到表。在CLR程序中这样做的手段并不是很明显。这样做并使用AcceptChanges或Update方法是一种可接受的解决方案。
答案 0 :(得分:2)
我估计SQLBulkCopy的速度比插入表大10到100倍,这取决于表的大小,因此权衡取舍是值得的。
看到你正在对DataTable进行“重要处理”,这无疑需要时间和资源,使用完整连接而不是上下文连接或打开全新连接的额外开销很小付出的代价。