Frage

Ich habe C # Windows Application.wann 'Button 1' Klicken Sie in 'Formular 1'. Ich habe einen Prozess, der Daten an wenige Tische schriftlich schrieben hat.Dieser Prozess, der normalerweise 10 Minuten dauert. Wenn ein Benutzer auf diese Schaltfläche 1 'klicken, klicken Sie ein anderer Benutzer, der mit demselben DB und ein Programm verwendet wird, das eine andere Taste in einer anderen Form anklicken, die Daten in dieselben Tabellen einfügen.

Wenn die Taste 1 klicken, starten Sie die SQL-Transaktion und beging, dass nach dem Abschluss des Prozesses.

Problem ist beim Ausführen dieses Prozesses, der zweite Benutzer einen Time Out-Fehler und er kann seinen Prozess nicht abschließen.

Was kann ich dafür tun? Wenn die SQL-Transaktion beginnt, sperrt die Tabellen, die für den Prozess verwendet werden?

War es hilfreich?

Lösung

was kann ich dafür tun?

Überarbeiten Sie Ihre Transaktionsabwicklung.Ernsthaft.

Dieser Prozess, der normalerweise 10 Minuten dauert

Eine 10-minütige Transaktion ist auf keinen Fall praktikabel.Ich kann keinen Grund dafür sehen, dass diese außerhalb der schlechten Comceptionalisierung keine Datenbank für die Datenbankarbeit für vielleicht 20 Jahre alles tue.Nie toleriert und hatte ein echtes Bedürfnis nach Transaktionen, die lange, normalerweise gibt es einen Weg.

Ja, Sie könnten ein Timeout ändern, dh der Benutzer 2 bedeutet 15 Minuten auf den Bildschirm.Keine echte Lösung.

Überarbeiten Sie Ihre Transaktion aus logischer Sicht.Was zum Teufel tust du dort, was 10 Minuten dauert, mit dem Start mit?

Andere Tipps

einfache Lösung kann jedoch den Benutzer benötigen, um lange zu warten.

Wenn Sie ein Thread verwenden, um dies (WinForm) mit Label1 als Arbeitstatus zu erreichen

generasacodicetagpre.

Dies ist die Art und Weise, wie ich normalerweise einen Fehler bewältige, dass ich es nicht wirklich reparieren kann.

danke

Eine Transaktion ist per Definition, um andere Transaktionen auf dieselben Ressourcen zu blockieren, da der SQL-Server garantiert, dass die Daten beim Commit angenommen werden und von jemand anderem nicht geändert werden. Es ist das

Also - was Sie tun können, ist entweder Ihre Transaktion schneller läuft, sodass er nicht länger blockiert und sperrt. Warten Sie länger auf den zweiten Benutzer. Oder keine Transaktionen verwenden. (oder behandeln Sie die Situation "besser" in Ihrer Code-Ebene, wenn es "erwartetes Verhalten" ist)

Sie können Ihre Transaktionen auch überprüfen, dass es nicht zu viel blockiert, aber wenn der zweite Prozess wirklich auf dieselben Ressourcen zugreifen muss, muss er warten.

Wenn Sie jedoch wirklich "dreckig" erhalten möchten, können Sie Isolationsstufen für den Server ändern, um das Lesen von Schmutzdaten zu ermöglichen, aber das ist absolut nicht etwas, das ich nicht tat, wenn Sie nicht wissen, was Sie tun. Aber es ist etwas, das das Leseanfragen beschleunigen kann, aber es kann eher seltsame Folgen haben, die schmutzige Daten und schmutzige Datenseiten lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top