SQL Server Compact timed out waiting for a lock
Ich habe eine Applikation, die ich Sql Compact 3.5 mit VS2008. Ich bin mit mehreren threads in meiner Anwendung, welche Kontakte die kompakte Datenbank und greift auf die Zeile. Es wählt und löscht die Zeilen in einer Weise ich.e Auswahl geben, um die Anwendung zu 5 Zeilen, und löschen Sie die Zeilen aus der Tabelle. Es funktioniert hervorragend mit einem einzelnen thread, aber wenn ich mit mehreren threads, die ich.e wenn 3 oder mehr threads läuft, bekomme ich sehr oft einen TimeOut-Fehler!!! Ich konnte die Time-out-Eigenschaft in der Verbindungszeichenfolge, aber es mir nicht das erwartete Ergebnis. Der error log ist wie folgt:
SQL Server Compact timed out waiting for a lock. Die Standard-lock-Zeit ist 2000ms für Geräte und 5000ms für desktops. Die Standard-lock-timeout erhöht werden kann in der Verbindungszeichenfolge mit der ssce: Standard-lock-timeout-Eigenschaft. [ Sitzungs-id = 5,Thread-id = 4204,Prozess-id = 4808,Table name = XXX -, Konflikt-type = x-Sperre (s-Blöcke),Ressource = TAB ]
Die Abfrage, die ich verwenden, um abzurufen, ist wie folgt:
"
wählen Sie Top(5) * from TableName order by id;
delete from TableName where id in(select top(5) id from TableName order by id");
"
Gibt es eine Möglichkeit, durch die wir vermeiden können, dieses Mal Aus Ausnahme???????
Den obigen Abfrage, die ich der UNO als eine Transaktion in VS2008 man mit SQLCECommand und die andere über SqlCEDataAdapter.
Jede Idee!!!!!!
Antwort
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe genau das gleiche problem hatte. Ich weiß, das ist eine alte Frage, aber für jeden, der Googeln für eine Antwort, die ich behoben, durch den Aufruf von Leser.Close () - auf meinem dataReader, wenn ich mit ihm fertig.
Wurde die Anwendung single-threaded, aber ich war immer die ganze Zeit wenn ich zu viele Anfragen zu schnell.
Ich hoffe, das hilft!
Gibt es einige Verbindungszeichenfolge Einstellungen, die Sie ausprobieren können, wie "Standard-Sperre timeout", und so weiter.
Sehen SqlCeConnection.ConnectionString-Eigenschaft bei http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring(VS.80).aspx.
(Ich hatte nichts aber Probleme, die die Verkettung von Abfragen mit dem semi-colon.)
Ich hatte das gleiche problem nur jetzt...
Das Problem war, dass ich getan hatte, eine
ALTER
Tabelle in einer Transaktion und versuchte dann zu Lesen, dass die Tabelle später in der gleichen Transaktion. oops. Entfernt dieALTER
Tabelle aus der Transaktion, und alles ist wunderbar wieder.Obwohl multi-threading mit SQLCE ist möglich, die Datenbank ist sehr begrenzt gleichzeitige Transaktionen.
Kapselung jeder SQLCE Verwandte Klasse, die IDisposable implementiert in der using-Anweisungen ist auf jeden Fall eine gute Idee, aber lock-Fehler immer noch auftreten, je nach Last.
Keiner der Verbindungszeichenfolge timeout-Optionen scheinen zu lösen.
Als workaround kann ich nur wiederholen Sie den Vorgang im Fall eines lock-Fehler.
Beachten Sie, dass die große SQL-server nicht leiden auf diese. Parallele Verarbeitung funktioniert ohne Probleme.