【问题标题】:Batch SQL inserts in .NET.NET 中的批量 SQL 插入
【发布时间】:2009-06-09 14:43:55
【问题描述】:

与在循环中使用 DbCommand.ExecuteNonQuery() 相比,就 DB 往返而言,使用 .NET DataAdapter 的批量插入功能是否更有效?

来自 Java 世界,我希望找到类似于它的批处理功能的东西,其中多个 SQL 命令被发送到数据库并在一个操作中执行。在监控数据库服务器时,我看到 DataAdapter 每次插入都会执行一次。

我已经阅读了一些使用 SqlBulkCopy 的主题,但这只适用于 MS Sql Server。

谢谢!

【问题讨论】:

    标签: c# .net sql


    【解决方案1】:

    DataAdapter 有一个 UpdateBatchSize 属性。将 UpdateBatchSize 设置为正整数值会导致对数据库的更新作为指定大小的批次发送。

    希望这会有所帮助...

    【讨论】:

    • 这是唯一支持命令批处理的级别。您不能批处理自己的 DbCommands(不使用反射公开一些内部类)。
    • 我试过这个。在 MS SQL Server 上,SQL Profiler 显示每个插入语句似乎都是独立的。在查看了您的评论后,我查看了对话的 TCP 转储,并且确实看到它正在将多个命令批处理在一起。 SQL Profiler 将每个插入显示为“RPC 完成”事件,这让我感到困惑。感谢您的帮助。
    【解决方案2】:

    怎么样: 一条语句多行

    mysql:
    INSERT INTO table (id) VALUES (1), (2), (3)
    
    mssql:
    INSERT INTO table (id)
    SELECT 1
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 3
    

    【讨论】:

    • 我担心这(字符串连接以构成插入语句)会使我面临 sql 注入,所以我使用命令对象和参数来清理输入。否则我可以做几个以';'终止的 INSERT table VALUES()或如您所建议的那样。谢谢你的建议!
    • 如果您将它用作 webapp 的一部分,那么您不应该使用它。大多数时候这些批处理操作。用于数据库更新和类似的东西。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2016-01-31
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多