在 .Net 中,在没有 RBAR 的情况下将多个业务对象一次性放入数据库的优雅方法?
我的应用程序中有一组已填充的自定义业务对象,我将使用存储过程将其插入到 SQL 2005 DB 中。馆藏规模不大,大概有20-30件。
是否有一种优雅的方法可以一次性将所有这些对象插入到数据库中,而无需执行以下操作?:
- Open DB conn
- 对于集合中的每个项目...
- 的 item.properties 设置 SP 参数值
- 从 SQLCmd SQLCmd.ExecuteNonQuery
- 清除参数
- Next
- 关闭 DB conn
I have a collection of populated custom business objects in my app which I'm going to insert into a SQL 2005 DB using a stored procedure. The collection size isn't massive, maybe 20-30 objects.
Is there an elegant way to insert all of these objects into the DB in one go without doing something like the following?:
- Open DB conn
- For each item in collection ...
- Set parameter values of SP from item.properties for SQLCmd
- SQLCmd.ExecuteNonQuery
- Clear parameters
- Next
- Close DB conn
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您使用的是 Sql 2008,则为表值参数。
http://www.sommarskog.se /arrays-in-sql-2008.html
Table valued paramaters if you are using Sql 2008.
http://www.sommarskog.se/arrays-in-sql-2008.html
您可以将所有对象序列化为文本格式 JSON 或其他格式,使用一个输入参数将字符串传递给 SPROC,然后反序列化对象并在 SPROC 内迭代它们。
您仍然需要执行单独的插入,但这是应用程序中的一项操作。
You could serialise all your objects into a text format JSON or whatever, pass the string to a SPROC with one input parameter, then de-serialise the objects and iterate them within the SPROC.
You'll still have to do individual inserts but it's one operation from your application.
使用存储过程一次性获取所有结果集?
Use a stored proc to get all resultsets in one go?
您可以以编程方式创建一个动态 sql 查询来生成一个大型插入语句并一次性执行该语句,或者按照您当前正在执行的操作进行操作。您的方法可能是最好的,因为如果其中一个插入失败,您可以更好地处理错误。
You could programatically create a dynamic sql query to generate a large insert statement and execute that in one go, or do as you're currently doing. Your way is probably best as you can deal with errors better should one of the inserts fail.