J'ai quelques services de windwos. Ils obtiennent la colonne xml du serveur Sql manipuler et mettre à jour.xml Mise à jour de colonne et verrouillage dans SQL Server
service A- Obtient XML
service B- Obtient XML
service A- Mises à jour XML (il sera perdu)
service B- Mises à jour XML
je fermerai la ligne et j'utiliser le code suivant :
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();
}
}`
se produit alors Deadlocks.
Avez-vous une meilleure idée, pour résoudre ce problème?
Merci
Oui, mais parfois "La transaction (ID de processus 108) a été bloquée sur les ressources de verrouillage avec un autre processus et a été choisie comme victime de l'interblocage. Exception. Mon code est-il responsable (à cause des verrous)? Comment éviter les blocages dans ce scénario? Merci –
Merci beaucoup. Updlock a résolu le problème! merci –