SQL服务器从ASP.NET插入大量数据?

时间:2013-09-12 08:12:13

标签: asp.net sql-server insert

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

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

2 个答案:

答案 0 :(得分:0)

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

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

您可以在此处详细了解:MSDN Table Valued Parameters

答案 1 :(得分:-1)

订单的1000件商品似乎相当多!

将每个订单的限制为100个项目引入应用程序的业务逻辑是否可行?