【问题标题】:SQL server inserting lots of data from ASP.NET?SQL 服务器从 ASP.NET 插入大量数据?
【发布时间】:2013-09-12 08:12:13
【问题描述】:

我有这个应用程序,其中有一个父子表,客户可以订购产品。整个结构在这里发布非常复杂,但可以说,有一张Order 表和一张OrderDetails 表用于存储订单。目前我们正在做的是INSERTOrder 表中的一条记录,然后对于客户添加的每个项目,将每个项目循环插入到OrderDetails 表中。由于显而易见的原因,该解决方案不可扩展。它适用于大约 100 个项目,但如果用户超过 1000 个项目,或者一个项目的数量超过 1000 个左右,就会开始注意到应用程序的无响应。

我想到了几个解决方案,但我不确定哪一个可以很好地扩展。一种是我使用asp.net 应用程序中的BulkInsert 插入OrderDetails 表。其次是我生成XML,然后将其传递给sql proc,并从XML 中提取/插入数据到OrderDetails 表中,但这会产生XML 生成的内存消耗的相关开销。我知道我可以进行基准测试并亲自查看最适合我的应用程序的方法,但我想知道最常见的策略是什么,并且与其他策略相比会更好地扩展。此外,如果我可以使用另一种技术来代替这两种技术,那将是更好的性能(我知道性能是主观的词,但让我把它缩小到速度)我可以使用它。一般用的最多的是哪个?您在应用程序中使用什么?

【问题讨论】:

标签: asp.net sql-server insert


【解决方案1】:

您可以考虑探索在数据库中使用表值参数的选项。您必须创建一个表类型对象,其结构将模仿 OrderDetails 表的结构。用于插入数据的存储过程将接受此类型的输入参数(此类参数始终为 READONLY)。

在您的服务器端代码中,您可以构造一个包含所有订单详细信息数据的 DataTable 对象,该对象将映射到存储过程的输入参数。确保 DataTable 对象中的列顺序与表值参数中的顺序完全匹配。执行查询后,所有数据将一次性插入。这将使您免于对那里的每一行数据进行循环,并且还可以防止 XML 解析的开销。但是,这种方法将涉及通过网络传递整个对象。

您可以在这里阅读更多信息:MSDN Table Valued Parameters

【讨论】:

    【解决方案2】:

    1000 件的订单似乎相当多!

    在应用程序的业务逻辑中引入每个订单 100 件商品的限制是否可行?

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2014-10-27
      • 2022-01-05
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多