从 .NET 4.0 应用程序将多行插入 SQL Server 2008 数据库的最佳方法
我有一个场景,我取回一个项目列表,我需要将每个项目插入数据库,其中一个项目 > >一行映射。
最初,我考虑使用一个存储过程来插入单个项目,然后循环遍历列表,为每个元素调用存储过程。但我想知道是否有更优雅/最佳的方法可用。特别是利用 SQL Server 2008 / .NET 4.0。
实体框架也可以发挥作用。
I have a scenario where I get back a list of items and I need to insert each item into a database, with one item > one row mapping.
Initially, I thought about using a stored procedure that would insert a single item, and looping over a list, calling the stored procedure for each element. But I wonder if there are more elegant/optimal methods available. Especially leveraging SQL Server 2008 / .NET 4.0.
Entity Framework could also come into play.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
SQLBulkCopy 快速而简单,您可以设置批量大小并映射所有列
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx
SQLBulkCopy is quick and easy, you can set up a batch size and map all of your columns
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx
有几种方法可以进行批量插入。
我之前曾在博客中介绍过选项 1 与选项 2 的性能此处。
There's a few ways you can do bulk inserts.
I've previously blogged about the performance of option 1 vs. option 2 here.
在实体框架中,您可以执行以下操作:
在包含 100 个插入的包中执行
SaveChanges()
...尝试使用 1000 个插入并查看更改。由于在所有这些插入期间,上下文都是相同的,因此您可以每 1000 次插入重建上下文对象。
在我的导入数据过程中进行此改进,将时间从 7 分钟缩短到 6 秒。
实际数字...在你的情况下不可能是 100 或 1000...尝试并调整它。
In Entity Framework you could do:
Do
SaveChanges()
in packages of 100 inserts... try with 1000 and see the changes.Since during all this inserts, the context is the same, you can rebuild your context object every 1000 inserts.
Doing this improvements in an importing data process of mine, took it from 7 minutes to 6 seconds.
The actual numbers... could not be 100's o 1000's in your case... try it and tweek it.