2017-10-15 4 views
-1

ich ein wenig Kampf mit diesem Problem bin, und wird für die Hilfe gerne -C# - Wie ein Verfahren zum Sperren von durch mehrere Verfahren zugegriffen wird

I aC# Projekt (SLN), die auf unterschiedlichen Lauf Remote-Maschinen - so erstellen sie verschiedene Instanzen der gleichen Klasse. Alle von ihnen sind mit der gleichen DB verbinden und die gleiche SQL-Transaktion ausgeführt.

Ich habe in der Methode, die DB-Methode aufrufen, die Daten „CanBeHandledByMachine (dalTestRequest, dalMachine, machineCanExecuteUITests)“

zu überprüfen, die überprüft, ob eine andere Maschine bereits die gleichen Daten von der DB erhalten hat. Aber, ich habe noch ein Kollisionen, 2 Maschinen in der Tat die gleichen Daten erhalten, Sperrobjekt (Mutex)/statische Klasse natürlich wird in diesem Fall nicht helfen ...

Warten für Ihre Hilfe Jungs :) Dank ,

+0

wissen Sie über Transaktion und Isolationsstufe in Datenbankebene? –

Antwort

1

Sie müssen die Sperren auf der freigegebenen Ressource, dh Ihre Datenbank behandeln. Sie geben nicht wirklich an, was Sie tun, aber ein typisches Szenario besteht darin, einen Datensatz "zu beanspruchen", um etwas zu bearbeiten.

Sie würden dies normalerweise tun, indem Sie die Tabellenzeile aktualisieren (z. B. eine Statusspalte -> 'Verarbeitung', so dass sie nicht länger als verarbeitbar gekennzeichnet wird) und die relevanten Spalten zurück in Ihre aufrufende Anwendung auswählen.

Die OUTPUT-Klausel ist ein guter Weg, dies zu tun, weil Sie eine exklusive Sperre für die Zeile (n) als Teil des UPDATE erwerben:

https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql

Verwandte Themen