将SQLite windows窗体应用程序迁移到通用windows应用程序(c#)

本文关键字:windows 应用程序 迁移 SQLite 窗体 | 更新日期: 2023-09-27 18:11:28

我做了一个windows窗体应用程序,连接到本地创建的SQLite数据库。这是一个很简单的应用,主要是选择和插入数据库。我有一个类检查这样的数据库是否存在,如果不存在,它就创建它。我还添加了一些执行查询之类的方法。

现在,在windows窗体中(或在控制台应用程序中)连接非常简单:

    SQLiteConnection conn = new SQLiteConnection("Data Source=sampleDB.sqlite;Version=3;");
    conn.Open();
    //Assume that i created table Person(int ID, string NAME)
    string sql = "select * from Person";
    SQLiteCommand command = new SQLiteCommand(sql, conn);
    SQLiteDataReader reader = command.ExecuteReader();
    while(reader.Read()){
        Console.WriteLine(reader["ID"] + " | " + reader["NAME"]);
    }
    conn.Close();
现在,我尝试将我的应用程序从Windows Forms迁移到Universal Windows app 。我做的第一件事,我看到System.Data.SQLite.dll对这样的应用程序无效,所以我安装了SQLite for Universal Windows Platform,以及SQLite。Net-PCL

但现在的问题是,我不知道如何传递查询作为字符串,我以前做过。我所遇到的是,我必须创建类Person,并将Id和Name作为属性,然后编写如下内容:

    SQLitePlatformWinRT sqlitePlatform = new SQLitePlatformWinRT();
    var db = new SQLiteConnection(sqlitePlatform, "sampleDB.sqlite");
    db.CreateTable<Person>();
    db.Insert(new Person(ID_PERSON, NAME_PERSON));

是否有任何方法,使用旧的方式(如在windows窗体)在通用windows应用程序?即:

    //Instead of using this:
    db.Insert(new Person(ID_PERSON, NAME_PERSON));
    //I want to use this:
    SQLiteCommand command = new SQLiteCommand("insert into Person ...", conn);
    command.ExecuteNonQuery(); 

将SQLite windows窗体应用程序迁移到通用windows应用程序(c#)

一个可能的方法是使用SQLite的可移植类库,它支持Sql查询字符串,就像你在Windows窗体中使用的那样。我们可以使用这个库来代替SQLite.Net-PCL。

要使用这个库,我们可以从NuGet中安装它,然后像这样使用它:

using (var connection = new SQLitePCL.SQLiteConnection("sampleDB.sqlite"))
{
    using (var statement = connection.Prepare(@"select * from Person"))
    {
        while (statement.Step() == SQLitePCL.SQLiteResult.ROW)
        {
            //TODO. For example
            //Gets the value of the specified column by the column name.
            var Id = (long)(statement["Id"]);
            var Name = (string)statement["Name"];
            //Gets the value of the specified column by the column ordinal.
            //var Id = (long)(statement[0]);
            //var Name = (string)statement[1];
        }
    }
}

更多信息,你可以参考这个博客:新的SQLite可移植类库。虽然本文是针对Windows 8.1的,但它也适用于UWP应用程序。