如何在 xamarin 中连接 sqlite

问题描述

我正在尝试连接到 DB(sqlite),但一直出现错误

System.TypeLoadException: '无法从 typeref 解析带有标记 01000150 的类型(程序集'sqlite-net,版本=1.7.335.0,Culture=neutral,PublicKeyToken=null'中的预期类'sqlite.CreateTableResult')'>

我的连接代码是:

this.db = new sqliteAsyncConnection(dbPath,storeDateTimeAsTicks: true);
this.db.CreateTableAsync<User>().Wait();

有什么建议可以解决这个问题吗?

解决方法

根据你贴出的错误日志我们复现这个问题是不一样的,你可以参考官方文档Xamarin.Forms Local Databases

并且上面的文档中包含了一个很好的示例,代码封装得很好,非常简洁。你可以在这里查看Todo

TodoItemDatabase.cs 如下:

public class TodoItemDatabase
{
    static SQLiteAsyncConnection Database;

    public static readonly AsyncLazy<TodoItemDatabase> Instance = new AsyncLazy<TodoItemDatabase>(async () =>
    {
        var instance = new TodoItemDatabase();
        CreateTableResult result = await Database.CreateTableAsync<TodoItem>();
        return instance;
    });

    public TodoItemDatabase()
    {
        Database = new SQLiteAsyncConnection(Constants.DatabasePath,Constants.Flags);
    }

    public Task<List<TodoItem>> GetItemsAsync()
    {            
        return Database.Table<TodoItem>().ToListAsync();
    }

    public Task<List<TodoItem>> GetItemsNotDoneAsync()
    {
        return Database.QueryAsync<TodoItem>("SELECT * FROM [TodoItem] WHERE [Done] = 0");
    }

    public Task<TodoItem> GetItemAsync(int id)
    {
        return Database.Table<TodoItem>().Where(i => i.ID == id).FirstOrDefaultAsync();
    }

    public Task<int> SaveItemAsync(TodoItem item)
    {
        if (item.ID != 0)
        {
            return Database.UpdateAsync(item);
        }
        else
        {
            return Database.InsertAsync(item);
        }
    }

    public Task<int> DeleteItemAsync(TodoItem item)
    {
        return Database.DeleteAsync(item);
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...