2016-05-22 1 views
0

を更新するとき、私は唯一の3レコードを持つテーブルを持っていると私はそれらのいずれかを更新しようとしています助け、C#のプログラムは、私はSQLiteのを使用してSQLコマンドをしようとしています</p> <p>、sqliteの記録

を必要とするフリーズブラウザとそれは完全に動作します

しかし、私はCで#正確なSQLを使用すると、プログラムがフリーズします(エラーの例外はまったくフリーズしません)。

これはラインである:

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(); 

私は文字列fromattingを試み、私はまたように直接的なアプローチを試みたが、私はSQLiteのパラメータを試し、方法のvariatyに

をこの試み上記の

彼らはすべて同じ問題、プログラムフリーズにつながった。

これは初めてのsqliteとC#です。

私はここで助けを見つけることができれば幸いです。

更新日:私は凍結後約3〜4分待って、例外データベースがロックされてしまいました。

+0

ここであなたの接続を開きますか? – Berkay

+0

tryブロックの前に接続をオープンしてからfinallyブロックを閉じます try内の2つのSQLを書きましたが、最初はSELECTであり、うまく動作します。 しかし、2番目のアップデートによってプログラムがフリーズしてデータベースになりますロックされた例外 –

+1

これをチェックしてください。 http://stackoverflow.com/questions/17592671/sqlite-database-locked-exception – Berkay

答えて

0

凍結後約3〜4分待って、私は例外 データベースがロックされるのを待っています。

これは、アスリートテーブルにデッドロック(またはロックが解除されていません)があることを示しています。このテーブルにアクセスする他のクエリはありますか?はいの場合は、あなたの投稿に表示してください。

SQLiteブラウザで構文BEGINまたはBEGIN TRANSACTIONを使用している場合は、対応するCOMMITまたはEND TRANSACTIONがあることを確認してください。後者が不足しているとロックが解除されない可能性があります。前記テーブルにアクセスすることができない。これを修正するには、SQLiteサービスをリセットし、上記のエラーを回避する必要があります。

例:

BAD(ロックが解除されることはありません)

BEGIN TRANSACTION 

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

GOOD(ロックが解除されます)

BEGIN TRANSACTION 

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

COMMIT 

EDIT:それはちょうど考えですので、ノーダウン投票してくださいxD

+0

私はTRANSACTIONを使用していません 私はここで何が問題か分かったと思います... 私は2つのSQLを実行しようとしています1つのオープンな接続thatsなぜ最初のSQLが動作するか2番目のSQLがフリーズする –

0

見つけた

問題の原因となっていたSQLiteDataReaderオブジェクトが開いていました。 {}を使用してSQLiteDataReaderを内部に配置すると、問題は解決します。

関連する問題