我正在为我们公司的应用程序使用同一库,据我所知,
http://wp7sqlite.codeplex.com(在“一些建议”下)也有记录。如果关闭连接,则需要重新创建连接。
== 其他评论 ==
我已经找到了错误的原因,创建了一个修复程序,并在我们的应用程序中进行了测试。简而言之,为了将Community.CSharpSqlite库移植到WP7,作者在WP7 IsolatedStorageFileStream周围编写了一个FileStream包装器。当打开db时,会打开并读取db文件流,并由CSharpSqlite关闭。但是,此流的句柄也存储在映射文件路径到流的Dictionary中。第二次打开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);
}
这是我第一次尝试调试并为开源项目做出贡献。非常欢迎您对这些更改提出任何评论或想法。
阿拉斯代尔。