【发布时间】:2009-11-09 17:44:09
【问题描述】:
我有一些windwos 服务。他们从 Sql server 获取 xml 列并对其进行操作和更新。
服务 A- 获取 XML
服务 B- 获取 XML
服务 A - 更新 XML(它将丢失)
服务 B - 更新 XML
我必须锁定行并使用下一个代码:
SqlCommand cmdUpdate = new SqlCommand();
cmdUpdate.CommandText = "select MyXML from MyTable with(holdlock,rowlock) where id=@id";
cmdUpdate.Parameters.AddWithValue("@id", id);
using (SqlConnection conn = Helper.GetConnection())
{
cmdUpdate.Connection = conn;
SqlTransaction ts = conn.BeginTransaction();
cmdUpdate.Transaction = ts;
XElement elem = XElement.Parse(cmdUpdate.ExecuteScalar().ToString());
UpdateXElement(elem);
cmdUpdate.Parameters.Clear();
cmdUpdate.CommandText = "update MyTable set MyXML=@xml where id=@id";
cmdUpdate.Parameters.AddWithValue("@id", id);
cmdUpdate.Parameters.AddWithValue("@xml", elem.ToString());
cmdUpdate.ExecuteNonQuery();
ts.Commit();
}
}`
然后发生死锁。
你有更好的主意来解决这个问题吗?
谢谢
【问题讨论】:
标签: sql-server xml locking deadlock