我目前有一个使用C#编写的WinForms应用程序。C# - 批处理执行存储过程
我们所有的更新都是通过执行存储过程完成的。我们在一个屏幕上有一个情况,在该屏幕上有多达60个更新。目前,每次更新呼叫都会逐一处理,而且客户端和服务器之间连接速度较慢的某些客户端遇到速度问题。我非常确定,如果我可以一次将所有这些调用发送到数据库,那么它会节省很多客户端的等待时间(目前对于这60个调用中的每一个来说,ExecuteNonQuery被调用并且客户机等待在继续之前为true/false结果,这导致延迟)。
将所有这些调用捆绑到一个SQL调用中的最佳方式是什么?正在考虑将所有代码放入事务中,但需要尽可能避免锁定,因为在任何给定点上都有许多并发用户使用系统。
编辑:存储特效的目的是从字面上更新服务器上的记录。我们甚至不需要正在执行的存储过程的任何响应。从本质上讲,我希望捆绑一堆调用的代码的下方进一个电话,想知道这样做的最好办法是
public virtual bool Update(DataRow dataRow, Guid userId)
{
SqlCommand cm = null;
bool ret = true;
try
{
cm = Utilities.GetSqlUpdateCommand(dataRow, userId);
ExecuteNonQuery(cm);
}
catch (SqlException ex)
{
LogDataAccessBaseError(ex);
ret = false;
throw;
}
finally
{
if (cm != null)
{
cm.Dispose();
}
}
return ret;
}
根据您需要什么样的准确性,NO LOCK查询提示可以帮助您避免锁定。如果你在处理金钱,那么忘记我甚至说过。但是,如果您处理的是网页在过去24小时内收到的点击次数,并且您不在乎它是否已关闭2%,那么它可能会有所帮助。 –