2009-04-22 61 views
1

我们在CLR过程中有一个内存中的DataTable。在处理大量数据之后,我们需要将大量数据加载到数据库的表中。不幸的是,由于我们使用的是context connection SqlBulkCopy不起作用(抛出错误:请求的操作在上下文连接outline of context restrictions上不可用)。来自DataTable的SQL CLR SqlBulkCopy

我们正在考虑建立一个额外的常规连接并使用它来执行SQLBulkCopy。考虑到使用regular connection over a context connection的开销,这似乎相当愚蠢。我们已经考虑过迭代DataTable中的行并为每个行插入记录,但它的大小很大,SQLBulkCopy看起来更合适。

我们没有和DataTable结婚,只是在寻找从CLR过程中将大量数据插入数据库的最佳方法。关于DataTable的最后一个注意事项是代表底层数据库表,但不通过DataSet或TableAdapter绑定到表。在CLR程序中这样做的手段并不明显。这样做并使用AcceptChanges或Update方法将是一个可接受的解决方案。

回答

2

我估计SQLBulkCopy比根据表大小进行插入要快10-100倍,所以权衡是非常值得的。

当你在DataTable上进行“重要处理”时,无疑需要时间和资源,使用全连接而不是上下文连接或打开全新连接的额外开销很小,小的价格付出。

+0

真的,DataTable仅仅是一个方便的对象,用于在重要处理之后存储记录。也就是说,将原始DataTable发送到SqlBulkCopy以进行记录插入的能力似乎是一次扣篮,直到我们遇到了连接类型的问题。对此我越想越多,我倾向于同意打开常规联系可能是一条路。 – ahsteele 2009-04-23 06:16:24