Sqlite-net的guid查询返回空guid

5
我正在开发一个使用sqlite作为数据库的Windows Store应用程序。我正在使用SQLite for Windows Runtime和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<Survey>().Select(s => Guid.Parse(s.SurveyGuid)).ToList();。不确定SurveyGuid的数据类型,它是数据库中的字符串吗?当代码调用 new Guid() 而不是 Guid.NewGuid()Guid.Parse* 时通常会发生这种情况。 - oleksii
SurveyGuid的类型是System.Guid,使用sqlite-net生成的表格,但是我知道在sqlite数据库中没有叫做数据类型的东西,你的数据类型可以是任何东西,比如ChickenSoup或其他。你的解决方案行不通,因为SurveyGuid是一个Guid,但是Guid.Parse()需要一个字符串。 - Ferenc Balogh
你能把表结构发布到http://sqlfiddle.com/吗? - Baljeetsingh Sucharia
2个回答

2

这不是一个答案,但它可能让您找到正确的方向。我注意到可以在连接字符串中添加一个选项,设置GUID是否以二进制形式存储

Data Source=c:\mydb.db;Version=3;BinaryGUID=False;

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


-1

我认为问题可能是基本脚本命令没有正确编写。这可能是一个数据库错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接