【问题标题】:SQL CLR SqlBulkCopy from DataTable来自 DataTable 的 SQL CLR SqlBulkCopy
【发布时间】:2010-10-21 05:42:26
【问题描述】:

我们在 CLR 过程中有一个内存数据表。经过大量处理后,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 方法将是一个可接受的解决方案。

【问题讨论】:

    标签: sql sql-server clr sqlclr sqlbulkcopy


    【解决方案1】:

    我估计 SQLBulkCopy 比插入快 10-100 倍,具体取决于表大小,因此折衷是值得的。

    看到您正在对 DataTable 进行“重要处理”,这无疑需要时间和资源,使用完整连接而不是上下文连接或打开全新连接的微小额外开销是很小的要付出的代价。

    【讨论】:

    • 实际上,DataTable 只是作为一个方便的对象,用于在经过大量处理后存储记录。也就是说,将原始 DataTable 发送到 SqlBulkCopy 以进行记录插入的能力似乎是一个灌篮,直到我们遇到连接类型的问题。我对此思考得越多,我就越倾向于同意打开常规连接可能是要走的路。
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 2015-03-04
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多