2016-05-22 11 views
0

Ich brauche Hilfe,C# Programm friert ein, wenn SQLite Datensatz aktualisieren

ich mit nur 3 Datensätze eine Tabelle und ich versuche, eine von ihnen nur zu aktualisieren,

Ich versuche, den SQL-Befehl eine SQLite Browser und es funktioniert einwandfrei

Aber wenn ich die gleiche genaue SQL in C# das Programm einfriert (keine Ausnahmen zu Fehlern friert nur).

ist dies die Linien:

query = new SQLiteCommand(); 
query.CommandText = "UPDATE athletes SET finishing_time = 123123123 WHERE epc = 'E2:00:30:73:99:02:01:31:16:70:6A:A3'"; 
query.Connection = m_dbConnection; 
query.ExecuteNonQuery(); 

Ich habe versucht, dies in einem variaty von Methoden,

I SQLite Parameter versucht,

I String fromatting versucht, und ich habe auch versucht, den direkten Weg als in oben.

sie führten alle zum selben Problem, Programm FREEZES.

Dies ist mein erstes Mal mit sqlite und C#.

Also ich hoffe, ich kann hier eine Hilfe finden.

UPDATE: Ich wartete etwa 3 bis 4 Minuten nach dem Einfrieren, ich bekomme Ausnahme Datenbank gesperrt ist.

+0

Wo öffnen Sie Ihre Verbindung? – Berkay

+0

Ich öffnete die Verbindung vor dem Versuch Block und dann schließen in schließlich Block Ich schrieb zwei SQL in den Versuch, erste ist SELECT und es funktioniert gut ,, aber die zweite Aktualisierung bewirkt, dass das Programm einfrieren dann bekomme ich Datenbank gesperrte Ausnahme –

+1

Überprüfen Sie dies bitte; http://stackoverflow.com/questions/17592671/sqlite-database-locked-exception – Berkay

Antwort

0

Ich wartete etwa 3 bis 4 Minuten nach dem Einfrieren, bekomme ich Ausnahme Datenbank ist gesperrt.

Dies besagt, dass ein Deadlock (oder Sperre ist nicht freigegeben) auf Ihrem Athletentisch. Gibt es eine andere Abfrage, die auf diese Tabelle zugreift? Wenn ja, zeig es auf deinem Post.

Wenn Sie im SQLite-Browser die Syntax BEGIN oder BEGIN TRANSACTION verwenden, vergewissern Sie sich, dass Sie eine entsprechende COMMIT- oder END TRANSACTION-Anweisung haben. Wenn letztere fehlt, wird die Sperre nicht ausgelöst, was möglicherweise der Grund für Ihre Anwendung ist nicht in der Lage, auf die Tabelle zuzugreifen. Um dies zu beheben, können Sie den SQLite-Dienst zurücksetzen und sicherstellen, dass der genannte Fehler vermieden wird.

Ex:

BAD (wird freigegeben Sperre)

BEGIN TRANSACTION 

    UPDATE athletes SET finishing_time = 123123123 WHERE epc = 'E2:00:30:73:99:02:01:31:16:70:6A:A3' 

COMMIT 

EDIT (Sperre wird nicht freigegeben)

BEGIN TRANSACTION 

UPDATE athletes SET finishing_time = 123123123 WHERE epc = 'E2:00:30:73:99:02:01:31:16:70:6A:A3' 

GOOD: Es ist nur eine Idee, so dass keine nach unten Abstimmung bitte xD

+0

Ich verwende nicht TRANSACTION Ich denke, ich habe herausgefunden, was das Problem hier .... Ich versuche, zwei SQL in auszuführen eine offene Verbindung, deshalb arbeitet das erste SQL, das zweite friert ein –

0

Gefunden,

Ich hatte und SQLiteDataReader-Objekt, das geöffnet wurde, was das Problem verursacht. Ich legte den SQLiteDataReader mit {} und das Problem ist gelöst.

Verwandte Themen