c# - SQLite 中的 MissingMethodException

标签 c# sqlite xamarin xamarin.forms

我试图让 SQLite 在本地存储一些信息,现在我遇到了一个恼人的问题:每当我调用 sqlite 函数 CreateTable 时,它​​都会返回一个异常。

这是一个异常(exception):

Unhandled Exception:
System.MissingMethodException: Method not found: string SQLitePCL.raw.sqlite3_column_name(SQLitePCL.sqlite3_stmt,int).

这是我用来使其跨平台的界面:

public interface IDataBase
{
    SQLiteConnection GetConnection();
}

Android 实现:

[assembly: Dependency(typeof(DataBase))]
namespace MyNameSpace.Droid
{
    public class DataBase : IDataBase
    {
        public DataBase() { }
        public SQLiteConnection GetConnection()
        {
            var fileName = "DataBase.db3";
            string docsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            string path = Path.Combine(docsPath, fileName);
            var conn = new SQLiteConnection(path);
            return conn;
        }
    }
}

还有 iO 版:

[assembly: Dependency(typeof(DataBase))]
namespace MyNameSpace.iOS
{
    public class DataBase : IDataBase
    {
        public DataBase() { }
        public SQLiteConnection GetConnection()
        {
            var fileName = "DataBase.db3";
            var docPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            var libraryPath = Path.Combine(docPath, "..", "Library");
            var path = Path.Combine(libraryPath, fileName);
            var conn = new SQLiteConnection(path);
            return conn;
        }
    }
}

然后我有我的表类型:

namespace MyNameSpace.DataBase
{
     public class MacroCategoria
     {
        [PrimaryKey]
        public int ID { get; set; }
        public string descrizione { get; set; }

        public MacroCategoria() { }

    }
}

获取第一个元素的数据库 Controller 和 I 方法:

namespace MyNameSpace.DataBase
{
    public class DBController
    {
        static object locker = new object();
        SQLiteConnection database;

        public DBController()
        {
            database = DependencyService.Get<IDataBase>().GetConnection();
            if (database != null)
            {
                database.CreateTable<MacroCategoria>();
                database.Insert(new MacroCategoria() { ID = 0, descrizione = "Description" });
            }
        }

        public MacroCategoria getFirstMacro()
        {
            lock (locker)
            {
                if (database.Table<MacroCategoria>().Count() == 0)
                    return null;
                else
                    return database.Table<MacroCategoria>().First();
            }

        }

    }
}

在App类中调用:

public partial class App : Application
{
    static DBController dbController;
    public App()
    {
        InitializeComponent();
        DependencyService.Register<MockDataStore>();
        MainPage = new MainPage();
    }

    [...Other Default Methods...]

    public static DBController DBController
    {
        get
        {
            if(dbController == null)
            {
                dbController = new DBController();
            }
            return dbController;
        }
    }
}

最后,当在我的主页中时,我有一个应该获取第一个元素的函数:

private void CartIcon_Clicked(object sender, EventArgs e)
{
    try
    {
        App.DBController.getFirstMacro();

    } catch(Exception ex) { throw; }
}

最佳答案

看起来我只需要添加 SQLitePCL.Raw 包。

关于c# - SQLite 中的 MissingMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57785849/

相关文章:

c# - 如何将整个模型从我的索引 View 传递到一个完全不同的 Controller ?

multithreading - 如何使用 Entity Framework 在 SQLite 中设置线程模式?

ios - 带有 Xamarin ipa 的 AirWatch MDM

c# - 使用具有泛型类型的解析方法?

c# - 将名字中的第一个和第三个字母大写,例如 McArthur 或 McMinn

c# - 如何在 C# 2010.NET 中创建控件数组?

ruby-on-rails - rake db:create“未知的无法解析YAML” sqlite3

sql - SQLite创建表AS,但重命名列并保留原始数据类型,键?

c# - Xamarin.Android 中基于 RESX 的本地化

xamarin - 我可以使用 Mac Mini 和 VS 2015 进行跨平台开发吗?