2016-10-03 4 views
1

Я создал приложение форм Windows, которое подключается к локально созданному SQLite db. Это довольно простое приложение, которое в основном делает выбор и вставка в базу данных. У меня был класс, который проверял, существует ли такая база данных, а если нет, она ее создала. Я также добавил некоторые методы для выполнения запросов и т. Д.Перенос приложения форм SQLite для приложений Windows (C#)

Теперь в окнах формы (или в консоли приложения) соединение было довольно просто:

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 для Универсальный приложений Windows. Первое, что я сделал, я увидел, что System.Data.SQLite.dll не действует для такого приложения, и поэтому я установил SQLite для универсальной платформы Windows вместе с SQLite.Net-PCL

Но проблема в том, что я не знаю, как передавать запросы в виде строки, как это было раньше. Все, что я столкнулся в том, что я должен был создать класс Person с Id и имя в качестве атрибутов, а затем написать что-то вроде этого:

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

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

Есть ли способ, чтобы использовать старый способ (как в Windows Forms) в Универсальное приложение 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 Query String, как то, что вы использовали в Windows Forms. Мы можем использовать эту библиотеку вместо 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, как бы вы могли использовать, скажем, атрибут Name из таблицы Person? –

+0

т. Е. До того, как я использовал читатель [«Имя»], чтобы получить этот атрибут. Как его использовать сейчас? –

+0

@MihaJamsek Чтобы прочитать записи, возвращаемые запросом, нам нужно выполнить итерацию по строкам таким образом, чтобы это было похоже на [SqlDataReader] (https://msdn.microsoft.com/en-us/library/system.data. sqlclient.sqldatareader (v = vs.110) .aspx) Класс. Здесь мы можем получить значение указанного столбца либо по порядку столбца, либо по имени столбца. Поскольку этот метод получает результат типа «Object», вам может потребоваться передать его в реальный тип столбца. Например, см. Мой обновленный ответ. –