2009-04-22 64 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