2015-07-21 3 views
0

У меня есть база данных SQLite, сгенерированная в Sqlite Browser с импортированными файлами Excel. В нем несколько таблиц. Каждая таблица имеет одинаковую структуру.Xamarin.Forms Выполнение SQLite.net данных

Колонки:

  • Возраст
  • 2000m
  • 2000F
  • 2500m
  • 2500f
  • ... и т.д.

Все, что мне нужно это, чтобы открыть эта база данных в моем Xamar in.Forms Shared project и выполнить 1 элемент за раз.

Каждая ячейка включает в себя 1 двойной номер. Мне нужно выполнить этот номер и отправить его на ярлык на экране.

Мне ничего не нужно писать в эту базу данных. Только читать.

Лучший способ, которым я могу себе представить, чтобы Execute SQL, как:

Select 2000m From Bravo Where Age = 20. 

Может кто-то помочь мне с этим?

+0

Из любопытства: почему у вас есть несколько столов с одинаковой структурой? Что вы имеете в виду, чтобы выполнить 1 элемент за раз? Я не думаю, что это имеет смысл в контексте. Вы что-то пробовали? Если вам нужен общий учебник: на этом веб-сайте есть учебник, проверьте их проект github: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/databases/ –

+0

Забудьте о несколько таблиц. Я добавлю столбец с еще одним полем, из которого результат может зависеть. –

+0

Учебники не показывают, как именно я могу получить доступ к данным и выполнить SQL. –

ответ

0

Так что проблема была в Windows Phone. Как-то он не может запустить SQLiteConnection. Но Android делает, поэтому iOS тоже.

Прежде всего я переехал мой DB к локальному пути применения:

public static string GetLocalFilePath(string filename) 
     { 
      string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
      string dbPath = Path.Combine(path, filename); 

      CopyDatabaseIfNotExists(dbPath); 

      return dbPath; 
     } 

     private static void CopyDatabaseIfNotExists(string dbPath) 
     { 
      if (!File.Exists(dbPath)) 
      { 
       using (var br = new BinaryReader(Application.Context.Assets.Open("KDLife_mobileDB.db3"))) 
       { 
        using (var bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create))) 
        { 
         byte[] buffer = new byte[2048]; 
         int length = 0; 
         while ((length = br.Read(buffer, 0, buffer.Length)) > 0) 
         { 
          bw.Write(buffer, 0, length); 
         } 
        } 
       } 
      } 
     } 

     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 

      global::Xamarin.Forms.Forms.Init (this, bundle); 
      global::Xamarin.FormsMaps.Init(this, bundle); 

      string dbPath = GetLocalFilePath("KDLife_mobileDB.db3"); 

      LoadApplication (new KDLife_mobile.App()); 

      App.ScreenWidth = (int)Resources.DisplayMetrics.WidthPixels; 
      App.ScreenHeight = (int)Resources.DisplayMetrics.HeightPixels; 


     } 

Тогда я открыл соединение:

public SQLiteConnection DBClass_conn() 
     { 
      database = new SQLiteConnection (DatabasePath); 
      return database; 
     } 

Затем я добавил SQLiteCommand:

SQLiteCommand cmd = new SQLiteCommand(App.Database.DBClass_conn()); 

И запрос :

public string querytext(string q_table) 
     { 
      string sql = "SELECT \"2000f\" FROM Bravo WHERE Age = \"20\" AND Period = \"15\"";//, App.amount_gender, q_table, App.age; 
      return sql; 
     } 

Тогда я просто изменить CommandText и ExecuteScalar:

cmd.CommandText = querytext("Symphony"); 
string count = (string)cmd.ExecuteScalar<string>(); 

Сейчас это выполнить только один запрос, но это не трудно сделать его более универсальным.

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