私は当社のアプリケーションに同じライブラリを使用しており、私が知る限り、http://wp7sqlite.codeplex.com(いくつかの推奨事項の下)にも記載されています。接続を閉じると、再度作成する必要があります。
==追加のコメント==
エラーの原因を突き止め、修正を作成し、アプリケーションでテストしています。簡単に説明すると、Community.CSharpSqliteライブラリをWP7に移植するために、作成者はWP7IsolatedStorageFileStreamの周りにFileStreamラッパーを作成しました。dbを開くと、dbファイルストリームがCSharpSqliteによって開かれ、読み取られて閉じられます。ただし、このストリームへのハンドルは、ファイルパスをストリームにマッピングするディクショナリにも格納されます。dbをもう一度開くと、ストリームへのハンドルが取得されますが、閉じられているため(私は、まだ検証していないと思います)、dbを開くことができません。
変更をwp7sqlite.codeplex.comプロジェクトにデプロイしようとしますが、それまでの間、ソースコードがある場合は、 Community.CsharpSqlite.FileStreamに次の変更を加えてください。
から変更する
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int unused)
{
IsolatedStorageFileStream handler = null;
if (FileStream.HandleTracker.TryGetValue(path, out handler))
{
_internal = handler;
}
else
{
if (mode == FileMode.Create || mode == FileMode.CreateNew)
{
_internal = IsolatedStorageIO.Default.CreateFile(path);
}
else
{
_internal = IsolatedStorageIO.Default.OpenFile(path, FileMode.OpenOrCreate);
}
FileStream.HandleTracker.Add(path, _internal);
}
}
に
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int unused)
{
IsolatedStorageFileStream handler = null;
if(FileStream.HandleTracker.TryGetValue(path, out handler))
{
_internal = handler;
if(!_internal.CanRead)
{
FileStream.HandleTracker.Remove(path);
CreateOpenNewFile(path, mode);
}
} else {
CreateOpenNewFile(path, mode);
}
}
private void CreateOpenNewFile(string path, FileMode mode)
{
if(mode == FileMode.Create || mode == FileMode.CreateNew)
{
_internal = IsolatedStorageIO.Default.CreateFile(path);
} else {
try {
_internal = IsolatedStorageIO.Default.OpenFile(path, FileMode.OpenOrCreate);
} catch(Exception ex) {
var v = ex;
}
}
FileStream.HandleTracker.Add(path, _internal);
}
デバッグしてオープンソースプロジェクトに貢献しようとするのはこれが初めてです。これらの変更についてのコメントや考えは大歓迎です。
アラスデア。