none
Windows Phone + sqlite в приложении RRS feed

  • Вопрос

  • Добрый день. Третий день не могу разобраться. Первый раз пишу приложение для windows phone 8.1. В нём будет использоваться база данных (заранее заполненная), в которую будут добавляться новые записи по мере надобности. Т.е. нужно уже готовую базу данных как-то добавить в приложение(ресурсы?)и при первом запуске скопировать её в локальную папку на устройстве. Нашёл статью http://developer.nokia.com/community/wiki/How_to_use_SQLite_in_Windows_Phone#Preparing_the_application_to_publish_to_the_Store, но код из того примера не работает.
    Вот нужная мне функция:
    private async void Application_Launching(object sender, LaunchingEventArgs e)
    {
    	StorageFile dbFile = null;
    	try
    	{
    		dbFile = await StorageFile.GetFileFromPathAsync(MainPage.DB_PATH);
    	}
        
    	catch (FileNotFoundException)
    	{
        
    		if (dbFile == null)
    		{
    			IsolatedStorageFile iso =IsolatedStorageFile.GetUserStoreForApplication(); 
        
    			// Create a stream for the file in the installation folder.
    			using (Stream input = Application.GetResourceStream(new Uri("sample.sqlite", UriKind.Relative)).Stream)
    		{
    				using (IsolatedStorageFileStream output = iso.CreateFile(MainPage.DB_PATH))
    				{
    					// Initialize the buffer.
    					byte[] readBuffer = new byte[4096];
    					int bytesRead = -1;
     
    					// Copy the file from the installation folder to the local folder. 
    					while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
    					{
    						output.Write(readBuffer, 0, bytesRead);
    					}
    				}
    			}
    		}
    	}
    


    ругается на isolatedstoragefile,application.getresourceStream(),isolatedstoragefilestream. Возможно этот код не подходит для windows phone 8.1. Что не так? Или как можно другим способом реализовать копирование базы? 
    12 марта 2015 г. 15:31

Ответы

  • Прямо подключится к базе не получиться т.к SQL Server на телефон невозможно развернуть , и по этому вы должны использовать  сервисы например Web Api передать вашу модель контроллеру и через Http запрос из приложения получить данные и их десериализовать , примерно

    ApiController 
    public SomeModel Get()
      {
        .......
      }
    WinPh
     
    private async void Button_clic(object sender, RoutedEventArgs e)
      {
       Uri uri= new Uri("http://localhost/Api/ControllerName");
       HttpClient client=new HttpClient();
       var request=await client.GetAsync(uri);
       var response= await request.content.ReadAsStringAsync();
       SomeModel model= JsonConvert.DeserializeObject<SomeModel>(response);
    
      }

    • Изменено Azat Tazayan 12 марта 2015 г. 19:33
    • Предложено в качестве ответа kariolan 13 марта 2015 г. 12:55
    • Помечено в качестве ответа YatajgaModerator 21 марта 2015 г. 13:27
    12 марта 2015 г. 19:08

Все ответы

  • Прямо подключится к базе не получиться т.к SQL Server на телефон невозможно развернуть , и по этому вы должны использовать  сервисы например Web Api передать вашу модель контроллеру и через Http запрос из приложения получить данные и их десериализовать , примерно

    ApiController 
    public SomeModel Get()
      {
        .......
      }
    WinPh
     
    private async void Button_clic(object sender, RoutedEventArgs e)
      {
       Uri uri= new Uri("http://localhost/Api/ControllerName");
       HttpClient client=new HttpClient();
       var request=await client.GetAsync(uri);
       var response= await request.content.ReadAsStringAsync();
       SomeModel model= JsonConvert.DeserializeObject<SomeModel>(response);
    
      }

    • Изменено Azat Tazayan 12 марта 2015 г. 19:33
    • Предложено в качестве ответа kariolan 13 марта 2015 г. 12:55
    • Помечено в качестве ответа YatajgaModerator 21 марта 2015 г. 13:27
    12 марта 2015 г. 19:08
  • Посмотрите статью, там описано как прикрутить уже существующую БД, если вопрос еще актуален!!!

    http://metanit.com/sharp/windowsphone/14.3.php

    24 июля 2015 г. 19:37