2016年7月26日火曜日

c#でSqliteのメッセージ、「unable to open database file」に苦戦した話

元はSqlCeを使っているシステムだった。
それをSqliteに乗り換えようと先週あたりから着手している。

複数システムで使っていて順に乗り換えているのだが何故だか一つのシステムで引っかかった。

構成としては、Windowsサービスがあり、
Windowsサービスが順に3つのバッチを上げるといった形のものだ。

で、個々のバッチはエラーを出さないのだがなぜかWindowsサービスがエラーを出していたので首をかしげていた。

unable to open database file

でググってみると大概はディレクトリのアクセス権に関するものだった。
そこは問題ない。問題あればそもそもバッチも動いてないだろう。

エラー箇所が一か所だったのでそこを見てみる。

ん?Openした後にこのコード入ったらまたOpenするじゃん

と。と言うわけでそこのコードは修正した。
そもそもConnectionをOpenした段階でファイルがなければ作成されるわけであらかじめOpenしておく必要はなかった。
※閉じればいいんだけど

が、しかし

相変わらず例外は出た。

最終的には複数個所でOpenしているのが問題で、
更にそれを閉じていなかったのが恐らく原因だった。
※恐らくと言うのはSystem.Data.SqliteやSystem.Data.SqlserverCeのコードを読んだわけではないので確証がない

たぶんSqlCeはよろしくやってくれていたのだろう。
しかしSqliteはそこは面倒見てくれなかった、そういう事なんじゃないかと予想。

最終的にはConnection.Openの前にStateを見てOpenでなければOpenするという方法でとりあえず回避した。
本当は都度都度Closeしたほうが良いのだろうけれど。

0 件のコメント:

コメントを投稿

壊れたテレビもメルカリで売れる

 先々月に壊れたテレビ。処分するにも金がかかる。 液晶以外は大丈夫そうとのことでメルカリに出したら即売れた。おそらく1時間以内。 ひょっとして安すぎた?とか思いつつも処分手数料が浮いたばかりか利益も出た。 問題になるのは配送ですが、メルカリには 梱包・発送たのメル便 というのがあ...