gpt4 book ai didi

c# - SQLite 未在 MonoDroid 和 MonoTouch 上正确存储 GUID 值

转载 作者:行者123 更新时间:2023-11-30 22:18:22 25 4
gpt4 key购买 nike

我正在使用 MonoDroid 将数据层从我的 Window Mobile 应用移植到 Android 和 iOS。我的数据层在 SQL SERVER、SQL CE 和 Windows SQLite 上运行并经过了很好的测试。

我在我的 Android 解决方案中为我的项目创建了类库并导入了我的所有代码。我创建了一个新的 DbEngine 实现来调整 Mono 上的 SQLite 查询。

当我通过“插入 [用户] 值('xx'、'hello'、null)”之类的文本插入表时,它工作正常,我可以看到受影响的行 > 0。但是,当我尝试使用命令和参数插入时,我在 GUID 列中得到了不正确的值,请查看屏幕截图。

// Creating the parameter
public override DbParameter CreateParameter(string name, object value)
{
DbParameter result;
if (value is byte[])
{
var length = (value as Array).Length;
result = new SqliteParameter(name, DbType.Binary, length) { Value = value};
}
else if (value is string && ((string)value).Length > 4000)
{
var length = ((string)value).Length;
result = new SqliteParameter(name, DbType.String, length) { Value = value };
}
else if (value is Guid)
{
result = new SqliteParameter(name, DbType.Guid) { Value = value }; // up to here, I can see that the GUID has the right value and the SQLiteParameter is created properly.
}
else
{
result = new SqliteParameter(name, value);
}
return result;
}

这是作为参数传递时插入行的方式 enter image description here

最佳答案

经过长时间的斗争,Mono.Data.SQLite 似乎不支持 GUID 参数。当我创建参数时,我需要在我的代码中解决这个问题,我检查它是否是 GUID,我创建了一个 string 类型的参数,如下所示:

result = new SqliteParameter(name, value.ToString());

这工作正常并正确存储值,也适用于查询数据库。这非常令人沮丧,尤其是当 Xamarin 团队告诉我这是一个 Unicode 问题时:(希望对其他人有帮助。

关于c# - SQLite 未在 MonoDroid 和 MonoTouch 上正确存储 GUID 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16140023/

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