我想运行更新存储过程来仅更新表中的两列(该表还有许多其他列)。
目前我已实施如下 -
foreach (Object obj in customCollection)
{
string[] updatedValues = GetUpdatedValues(obj.Property1);
using (SqlConnection sqlConnection = new SqlConnection(connString))
{
sqlConnection.Open();
SqlParameter[] sqlParams = new SqlParameter[2];
sqlParams[0] = new SqlParameter("@column1", SqlDbType.Float) { Value = updatedValues[0]};
sqlParams[1] = new SqlParameter("@column2", SqlDbType.Float) { Value = updatedValues[1] };
using (SqlCommand command = new SqlCommand("upUpdateProcedure", sqlConnection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddRange(sqlParams);
DatabaseHelper.ExecuteNonQuery(command);
}
}
}
因此,正如您所看到的,上面的代码正在为集合中的每个对象调用数据库。
我浏览了一些“从 C# 批量更新到 SQL Server”的链接,但大多数链接都建议在 C# 代码中加载表,更新表行,然后调用 DataAdapter.Update()。
然而,只是想知道是否有其他已知的方法来以不同的方式处理这种情况 - 我的意思是我不想将整个表加载到内存中,因为它还有许多其他列数据。
请指导。
我经常做的一件事是以一个块的形式将 XML 发送到 SQL。比在循环中多次调用数据库的性能要好得多。
乔恩·加洛韦(Jon Galloway)有一首老歌,但很不错here http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx您可以参考。
您所需要做的就是将数据或列转换为 XML。如果你在一个类中拥有这些数据,那就非常简单了。查看这个扩展方法 https://gist.github.com/1406901- 我不记得在哪里找到这个代码,所以我无法正确归属它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)