В папке проекта я получил готовую базу данных .db с полями "город", "область" и добавленными данными.
Так как же получить информацию из базы данных, где город == какое-то значение?
Я использую C#, sqlite-net и SQLite.
Как получить данные из базы данных? SQLite на WinRT
Ответы (1)
Допустим, у вас есть следующая база данных с одной таблицей, которая выглядит следующим образом:
- добавьте файл базы данных ".db" в свой проект, я решил поместить его в папку данных, чтобы сохранить структуру проекта,
- установите действие сборки файла базы данных на содержимое, чтобы оно было скопировано в файл AppX при компиляции,
— теперь файл ".db" необходимо скопировать в Локальная (или Перемещаемая) папка в зависимости от ваших потребностей и размера базы данных, добавьте следующий метод в App.xaml.cs файл
private async Task CopyDatabase()
{
bool isDatabaseExisting = false;
try
{
var s = ApplicationData.Current.LocalFolder.Path;
StorageFile storageFile
= await ApplicationData.Current.LocalFolder.GetFileAsync("DataBase.db");
isDatabaseExisting = true;
}
catch
{
isDatabaseExisting = false;
}
if (!isDatabaseExisting)
{
StorageFile databaseFile = await
Package.Current.InstalledLocation.GetFileAsync(@"Data\DataBase.db");
await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder);
}
}
приведенный выше код скопирует базу данных в Локальную папку из InstalledLocation (Appx),
вызовите эти методы в методе
OnLaunched
:Для того, чтобы вы могли выполнять запросы Sql к базе данных, есть несколько способов, одним из которых является использование SQLitePCL, поэтому добавьте ее в свой проект с помощью Nuget:
Пакет установки SQLitePCL
добавьте также ссылку на SQLite для среды выполнения Windows (Windows 8.1), используя этот расширение
добавьте модель данных: для каждой таблицы в базе данных создайте класс, который будет содержать ту же структуру, здесь у нас есть только одна таблица '
Data
':public class Data { public long Id { get; set; } public String City { get; set; } public String Area { get; set; } }
добавьте класс, который будет содержать всю логику взаимодействия с данными, и добавьте все необходимые операции с базой данных, используя
Sqlite.netPcl
lib:public class DataService { private readonly SQLiteConnection _connection; public DataService() { _connection = new SQLiteConnection("DataBase.db"); } public async Task<List<Data>> GetAllCities() { var cities = new List<Data>(); using (var statement = _connection.Prepare("SELECT * FROM Data")) { while (statement.Step() == SQLiteResult.ROW) { cities.Add(new Data() { Id = (long)statement[0], City = (string)statement[1], Area = (string)statement[2] }); } } return cities; }
}
здесь нет необходимости, чтобы метод был async
, но вы можете подумать, что в сложных сценариях
наконец, чтобы получить данные, просто вызовите метод
GetAllCities
:public async void MainPage_OnLoaded(object sender, RoutedEventArgs routedEventArgs) { var dataService=new DataService(); ListV.ItemsSource = await dataService.GetAllCities(); }
Ксамл:
<ListView x:Name="ListV" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding City}"/>
<TextBlock Text="{Binding Area}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>