【问题标题】:Sqlite-net guid select returns empty guidSqlite-net guid 选择返回空 guid
【发布时间】:2013-09-19 18:17:36
【问题描述】:

我正在开发一个使用 sqlite 作为数据库的 Windows 应用商店应用程序。我将 SQLite 用于 Windows 运行时和 sqlite-net。尝试从表中获取 Guid 列表,但仅在列表中获取空 guid ({00000000-0000-0000-0000-000000000000})。但是,当仅查询一个 guid 时,它可以正常工作。

我的代码如下:

async void SyncSurveys()
    {
        SQLiteConnection _db = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "SurveyDB"));

        var localSurveys = (from s in _db.Table<Survey>()
            select s.SurveyGuid).ToList();

        ...
    }

我也尝试过以下格式的查询,但都不行:

var localSurveys = _db.Table<Survey>().Select(s => s.SurveyGuid).ToList();

但如果我使用以下查询,仅获取一个 guid 仅用于调试目的,则效果很好:

var localSurvey = db.Table<Survey>().FirstOrDefault().SurveyGuid;

在不工作的情况下,列表的计数与表的行计数匹配。有谁知道为什么这不适用于列表版本?

【问题讨论】:

  • 尝试使用Parse 方法,例如_db.Table&lt;Survey&gt;().Select(s =&gt; Guid.Parse(s.SurveyGuid)).ToList();。不确定SurveyGuid 的数据类型是什么,它是数据库中的字符串吗?这通常会在代码调用 new Guid() 而不是 Guid.NewGuid()Guid.Parse* 时发生
  • SurveyGuid 的类型是System.Guid,使用 sqlite-net 生成的表,但据我所知,在 sqlite 数据库中不是一种称为数据类型的东西,您的数据类型可以是任何东西,例如 ChickenSoup 或其他。您的解决方案不起作用,因为 SurveyGuidGuid,但 Guid.Parse() 需要字符串。
  • 可以把表结构发到sqlfiddle.com吗?

标签: c# sqlite windows-store-apps sqlite-net


【解决方案1】:

这不是一个答案,但它可能会让你走上正确的道路。我注意到有一个选项可以添加到连接字符串中,用于设置 GUIDS 是否以二进制形式存储

数据源=c:\mydb.db;Version=3;BinaryGUID=False;

更多信息https://www.connectionstrings.com/sqlite/

【讨论】:

    【解决方案2】:

    我认为问题应该是基本脚本命令是否正确编写。 它可能是一个错误数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多