2016-10-03 150 views
1

我製作了一個連接到本地創建的SQLite數據庫的Windows窗體應用程序。這是一個非常簡單的應用程序,主要是選擇並插入數據庫。 我有一個類來檢查這樣的數據庫是否存在,如果不存在,它創建它。我還添加了一些執行查詢等的方法。將SQLite窗體應用程序遷移到通用Windows應用程序(C#)

現在,在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窗體通用的Windows應用程序。我做 的第一件事,我看到System.Data.SQLite.dll不適用於這樣的應用程序,所以我SQLite.Net-PCL安裝SQLite,讓通用Windows平臺,一起

但現在的問題是,我不知道如何像以前那樣將查詢作爲字符串傳遞。 所有我遇到的是,我要創建一流的人與標識和名稱的屬性,然後寫些這樣的:

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

    db.Insert(new Person(ID_PERSON, NAME_PERSON)); 

有什麼辦法,用舊的方式(如Windows窗體)在通用Windows應用程序? IE:

//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(); 

回答

0

一種可能的方式是使用Portable Class Library for 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]; 
     } 
    } 
} 

欲瞭解更多信息,你可以參考這個博客:The new Portable Class Library for SQLite。儘管本文適用於Windows 8.1,但它也適用於UWP應用程序。

+0

你能否也請在TODO部分添加如何使用讓我們說來自表Person的Name屬性? –

+0

即在我使用reader [「Name」]獲取該屬性之前。我現在如何使用它? –

+0

@MihaJamsek爲了讀取查詢返回的記錄,我們需要以類似[SqlDataReader](https://msdn.microsoft.com/en-us/library/system.data)的方式遍歷行。 sqlclient.sqldatareader(v = vs.110).aspx)Class。在這裏,我們可以通過列序號或列名稱來獲取指定列的值。由於此方法得到「Object」類型的結果,因此可能需要將其轉換爲列的實際類型。例如,請參閱我更新的答案。 –

相關問題