Ich habe eine große Web-Anwendung auf asp.net 2.0. Usere öffnen Objekt-Editor dort und macht einige Änderungen. Sie können nicht das gleiche Objekt auf einmal öffnen.Schlafen warten Befehl blockiert andere Transaktionen
Nach dem Drücken von "Speichern" btn alle Änderungen Prozess auf Server über Postback zu speichern.
Ich verwende Transaktion zum Speichern. Es gibt eine Menge von Prozeduren, Überprüfungen und anderen Vorgängen, bevor der Speichervorgang in Ordnung ist.
using (SqlConnection con = .........)
{
SqlTransaction trans = null;
try
{
con.Open();
trans=con.BeginTransaction(IsolationLevel.ReadUncommitted);
........operations.........
trans.Commit();
}
catch (Exception e)
{
try { if (trans != null) trans.Rollback(); }
catch { }
throw new MyException("SQL Exception: " + e.Message, e);
}
finally
{
if (con != null && con.State == ConnectionState.Open) con.Close();
}
}
Für mich ist dieser Code ziemlich sicher.
Aber regelmäßig passiert: ein Prozess von dieser Webanwendung auf Speichern-Vorgang auf mssql wurde "schlafen/warten". und andere Prozesse, die von anderen Benutzern aufgerufen wurden, wurden von diesem Prozess gesperrt und organisieren eine Warteschlange.
Einer von ihnen warf Timeout Excection ..... aber andere warten.
Also meine Frage ist: hat mein Code einige schlechte Operation, die Befehl ermöglicht zu schlafen/warten? Vielleicht gibt es ein paar Tricks?
Sie haben offensichtlich Code weggelassen, um Sie Code Beispiel zu verkürzen, so könnte es daran liegen, aber ich sehe kein trans.Commit() Call irgendwo in Ihrem Code? – jvanrhyn
Aus Grund habe ich ....... – cyssima
Was ist der Zweck des leeren Catch-Block nach "try {if (trans! = Null) trans.Rollback(); } '. Ich frage mich, ob das einen Fehler begräbt. –