繁体   English   中英

在SQL Server 2008中处理来自c#的多个db更新

[英]Handle multiple db updates from c# in SQL Server 2008

我喜欢找到一种方法来处理sql db的多个更新(使用一个单独的db往返)。 我在SQL Server 2008 http://www.codeproject.com/KB/database/TableValueParameters.aspx中读到了表值参数,这看起来非常有用。 但似乎我需要创建一个存储过程和一个表类型来使用它。 真的吗? 也许是出于安全考虑? 我想像这样运行一个文本查询:

var sql = "INSERT INTO Note (UserId, note) SELECT * FROM @myDataTable";
var myDataTable = ... some System.Data.DataTable ...
var cmd = new System.Data.SqlClient.SqlCommand(sql, conn);
var param = cmd.Parameters.Add("@myDataTable", System.Data.SqlDbType.Structured);
param.Value=myDataTable;
cmd.ExecuteNonQuery();

所以

A)我是否必须创建存储过程和表类型才能使用TVP?
B)建议使用哪种替代方法向SQL Server发送多个更新(和插入)?

是的,您需要创建类型。

替代方案是发送大型字符串sql批处理或将XML传递给sprocs。

大sql字符串批处理的缺点是它可能会破坏sql proc缓存并可能导致sql重新编译 - 特别是如果批处理是唯一的,因为输入数据是该大字符串的一部分。 根据定义,每个批次都是唯一的。

在TVP之前,XML是主要的替代方案。 XML的一个缺点,至少有一段时间,sql azure不支持它(可能会改变吗?)所以它限制了你的选择。

TVP似乎是这样做的方式。 我们的项目刚刚转换为使用TVP。

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM