2

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

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

当我通过诸如“插入[用户]值('xx','hello',null)'之类的文本插入表格时,它工作正常,我可以看到affectedRows> 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;
}

这是作为参数传递时插入行的方式 在此处输入图像描述

4

1 回答 1

3

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

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

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

于 2013-04-29T05:40:42.333 回答