몇 가지 windwos 서비스가 있습니다. SQL Server에서 xml 열을 조작하고 업데이트합니다.xml SQL Server의 열 업데이트 및 잠금
서비스 A-는 XML
서비스 B-는 XML을
서비스 A- 업데이트 XML (이 손실됩니다)
서비스 B- 업데이트 XML을 가져옵니다 가져옵니다
내가 행을 잠 가야하고 내가 다음 코드를 사용 :
SqlCommand cmdUpdate = new SqlCommand();
cmdUpdate.CommandText = "select MyXML from MyTable with(holdlock,rowlock) where [email protected]";
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 [email protected] where [email protected]";
cmdUpdate.Parameters.AddWithValue("@id", id);
cmdUpdate.Parameters.AddWithValue("@xml", elem.ToString());
cmdUpdate.ExecuteNonQuery();
ts.Commit();
}
}`
그러면 교착 상태가 발생합니다.
이 문제를 해결하기 위해 더 좋은 아이디어가 있습니까?
감사합니다.
예,하지만 때때로 발생합니다 "트랜잭션 (프로세스 ID 108)이 다른 프로세스에서 잠금 리소스에 교착 상태가 발생하여 교착 상태가 발생했습니다. 트랜잭션을 다시 실행하십시오." 예외. 내 코드가 책임 져야합니까 (잠금으로 인해)? 이 시나리오에서 교착 상태를 방지하는 방법은 무엇입니까? 감사합니다. –
고마워요. Updlock이 문제를 해결했습니다! 감사합니다. –