C# 将对象列表的数据向上插入到数据库

C# 将对象列表的数据向上插入到数据库,c#,asp.net,sql-server,sql-server-2008,C#,Asp.net,Sql Server,Sql Server 2008,通常,我发现自己需要向存储过程发送用户更新的记录集合。例如,假设数据库中有一个contacts表。在前端,我显示10条联系人记录供用户编辑。用户进行更改并点击保存 此时,我可以在循环中使用用户修改的数据调用upsertContact存储过程10次,或者将XML格式的namelname和所有10次一起发送到存储过程。我最后总是做xml 有没有更好的方法来实现这一点。如果由于大小原因存在大量记录,xml方法是否会中断。如果是这样,人们如何实现这种功能 仅供参考,它通常不仅仅是一个直接的表更新,所以我

通常,我发现自己需要向存储过程发送用户更新的记录集合。例如,假设数据库中有一个contacts表。在前端,我显示10条联系人记录供用户编辑。用户进行更改并点击保存

此时,我可以在循环中使用用户修改的数据调用upsertContact存储过程10次,或者将XML格式的
namelname
和所有10次一起发送到存储过程。我最后总是做xml

有没有更好的方法来实现这一点。如果由于大小原因存在大量记录,xml方法是否会中断。如果是这样,人们如何实现这种功能

仅供参考,它通常不仅仅是一个直接的表更新,所以我没有研究过sqldatasource

更改:根据请求,目前的版本为SQL 2005,但我们现在正在升级到2008。因此,欢迎使用任何新功能。谢谢


更新:根据文章和下面的反馈,我认为表值参数是最好的选择方法。另外,sql 2008的新功能在TVP中也非常酷。

我认为直接在数据库中操作XML会比走这条路更麻烦;我建议像你建议的那样把每个电话分开;10次呼叫以保存每个联系人


这种方法既有好处也有缺点;显然,您必须创建数据库连接。但是,您可以简单地将一组命令排队,以便在一个连接上发送。

我认为,直接在数据库中操作XML会比走这条路更麻烦;我建议像你建议的那样把每个电话分开;10次呼叫以保存每个联系人


这种方法既有好处也有缺点;显然,您必须创建数据库连接。但是,您可以简单地将一组命令排队,以便在一个连接上发送。

Sql Server XML数据类型与VARCHAR(MAX)相同,因此需要非常大的更改集才能使其中断


我过去在保存XML请求和响应时使用过类似的方法,但没有发现任何问题。不确定它是否是“最佳”解决方案,但“最佳”始终是相对的。

Sql Server XML数据类型与VARCHAR(MAX)相同,因此需要非常大的更改集才能使其中断


我过去在保存XML请求和响应时使用过类似的方法,但没有发现任何问题。不确定它是否是“最佳”解决方案,但“最佳”总是相对的。

听起来您可以使用类似或的解决方案。这些解决方案使您能够对对象进行更改,并通过ORM提供程序将更改传播到数据库。这使它们比向数据库发出自己的sql语句灵活得多。他们还进行了优化,例如通过单个连接发送单个事务中的所有更改。

听起来您可以使用类似或的解决方案。这些解决方案使您能够对对象进行更改,并通过ORM提供程序将更改传播到数据库。这使它们比向数据库发出自己的sql语句灵活得多。他们还进行优化,如通过单个连接发送单个事务中的所有更改。

什么版本的SQL Server?您可以在SQL Server 2008+中使用表值参数。。。它们非常强大,即使它们是只读的,并且比XML更简单,比转换为ORM(IMHO)更容易。点击以下资源:

MSDN:表值参数:

SQL Server 2008/表值参数中的Erland Sommarskog数组和列表:


什么版本的SQL Server?您可以在SQL Server 2008+中使用表值参数。。。它们非常强大,即使它们是只读的,并且比XML更简单,比转换为ORM(IMHO)更容易。点击以下资源:

MSDN:表值参数:

SQL Server 2008/表值参数中的Erland Sommarskog数组和列表:


您能否同时更新多个实体?有时联系人也可以有地址列表。我听说您无法控制它们生成的sql,在某些情况下,它可能不是最优的。确实,您无法控制请求生成的sql。但是,如果需要修改SQL,您可以让对象调用存储过程进行插入和更新。此外,一次调用将插入整个对象图。因此,如果联系人有地址,也会插入这些地址。你能同时更新多个实体吗?有时联系人也可以有地址列表。我听说您无法控制它们生成的sql,在某些情况下,它可能不是最优的。确实,您无法控制请求生成的sql。但是,如果需要修改SQL,您可以让对象调用存储过程进行插入和更新。此外,一次调用将插入整个对象图。因此,如果联系人有地址,也会插入这些地址。对于10条记录,一次呼叫一条可能没问题,但如果是100条呢?您认为xml路由会出现什么问题?解析xml可能会非常昂贵。虽然SQL Server在XML支持方面已经取得了长足的进步,但它离完美甚至我称之为“最优”还有很长的路要走。我想,它可能比多次调用proc更为优化。如果这是仅有的两个选项,那当然;但我认为还有更好的选择(例如TVP)。我们在我的老公司也遇到了同样的争论——我们是应该允许多行存储过程,还是应该让API进行多个调用?你可能不会来