我爲我們公司的應用程序使用了相同的庫,據我所知,也記錄在http://wp7sqlite.codeplex.com (under Some Recommendations),如果關閉連接,則需要重新創建它。
==其他評論==
我就找到了錯誤的原因,造就了修復和我在我們的應用程序測試它。簡而言之,爲了將Community.CSharpSqlite庫移植到WP7,作者圍繞WP7 IsolatedStorageFileStream編寫了一個FileStream封裝器。打開數據庫時,數據庫文件流將被打開並讀取並由CSharpSqlite關閉。但是,此流的句柄也存儲在將文件路徑映射到流的字典中。當數據庫第二次打開時,該流的句柄被檢索,但是由於它被關閉(我假設,尚未驗證)數據庫無法打開。
我將嘗試獲得部署到wp7sqlite.codeplex.com項目我的變化,但在此期間,如果你有source code進行以下修改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);
}
這是我第一次嘗試調試和貢獻一個開源項目。任何意見或對這些變化的想法將不勝感激。
阿拉斯代爾。
由現在超過100個問題,你應該知道如何格式化您的文章,看到http://stackoverflow.com/editing-help更多。 – BoltClock 2011-04-08 11:55:13