2015-07-04 6 views
0

Я получил готовую базу данных .db в моей папке проекта с полями «город», «область» и добавленные данные.
Итак, как получить информацию из базы данных, где находится город == какое-то значение?
Я использую C#, sqlite-net и SQLite.Как получить данные из базы данных? SQLite на Winrt

+1

Что именно вы ищете для подключения к sqlite или просто кода sql для получения требуемых данных? И что вы пробовали до сих пор? – Spidey

+0

@Nimesh Я ничего не пробовал, потому что все статьи показывают, как создать новую базу данных, но мне нужно получить данные из существующего .db-файла. Я ищу код sqlite (соединение и т. Д.), А не запрос (я знаю запрос). –

+0

Вы проверили это [сообщение] (http://stackoverflow.com/questions/19851213/how-to-usecreate-db-create-table-query-etc-praeclarum-sqlite-net?rq=1)? – Spidey

ответ

4

Пусть у вас есть следующая единая база данных таблицы, которая выглядит следующим образом:

DataBase schema

  • добавить файл база данных «.db» в свой проект, я выбираю, чтобы поместить его в данных Папка сохранить проект структурирован,
  • установить действие сборки файла базы данных для содержания, так он будет скопирован в файлAppX при компиляции,

Build action - Теперь, файл «.db» необходимо скопировать в папку Local (или Роуминг) на основе ваших потребностей и от размера базы данных, добавьте следующий метод к 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: enter image description here

  • Для того, чтобы выполнить SQL-запросов к базе данных, существует несколько способов, один из них с помощью SQLitePCL библиотеки , поэтому добавьте его в свой проект с помощью Nuget:

Install-P ackage SQLitePCL

  • добавить, а также ссылки на SQLite для среды выполнения Windows (Windows 8.1) с помощью этого Vs extension

  • добавить модель данных: для каждой таблицы в базе данных создать класс, который будет содержать ту же структуру, здесь мы имеем только один стол «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(); 
    
    } 
    

Xaml:

<ListView x:Name="ListV" > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text="{Binding City}"/> 
       <TextBlock Text="{Binding Area}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

О чувак! Большое спасибо! Вы объяснили, почему нам нужен класс для таблицы. Еще раз спасибо! –

+0

u приветствуются :)) – Usama

Смежные вопросы