gpt4 book ai didi

c# - Windows Phone 7 : SQLite

转载 作者:IT王子 更新时间:2023-10-29 06:25:43 27 4
gpt4 key购买 nike

我正在尝试让 Community.Csharp 与 Windows Phone 一起工作,我尝试使用来自 http://wp7sqlite.codeplex.com/ 的两个版本并使用 WINDOWS_PHONE 标志编译主干,但是当我在手机上运行应用程序时,我在尝试执行任何查询时遇到错误(但在打开数据库时没有;仅在查询时):“无法打开数据库文件”

_conn = new SqliteConnection("Version=3,uri=file:recipes.sqlite");
_conn.Open();
cmd.CommandText = "SELECT * FROM recipes";
SqliteDataReader reader = cmd.ExecuteReader();

不过有趣的是,我使用以下方法检查表是否存在并且没有抛出异常:

cmd.CommandText = "SELECT * FROM sqlite_master WHERE name='" + tableName + "'";
SqliteDataReader rdr = cmd.ExecuteReader();
exists = rdr.Read();
rdr.Close();

我有一个使用 SQLite 的 Windows 应用程序,所以如果我可以使用 SQLite 而不是 Sterling DB 或其他东西,那将节省大量时间。我目前遇到的问题是,一旦我打开并关闭数据库,就无法重新打开它。

最佳答案

我正在为我们公司的应用程序使用相同的库,据我所知,也记录在 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);
}

这是我第一次尝试调试和贡献开源项目。非常感谢对这些更改的任何意见或想法。

阿拉斯代尔。

关于c# - Windows Phone 7 : SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com