Статьи

База данных изолированного хранилища Windows Phone 8

Введение

В этой статье мы увидим реляционную локальную базу данных в Windows Phone 8 и сохраним данные локально. Он доступен только для конкретного приложения. В Windows Phone 8 LINQ играет важную роль в создании схемы. Операции CRUD LINQ to SQL будет действовать как мост между объектами контекста данных. В Windows Phone 8 локальная БД называется изолированным хранилищем. 

Примечание

LINQ используется для запроса данных из изолированного хранилища. 

  1. using System.IO.IsolatedStorage 
    using System.Linq 

Пространство имен для доступа к API изолированного хранилища. 

Теперь мы увидим операции Create, Read, Update, Delete (CRUD). 

Процедура

Создайте новое имя проекта Windows Phone 8 как LocalDBDemo и разработайте пользовательский интерфейс для выполнения операции CRUD, как показано на следующем экране. 

LocalDBDemo

Розовый цвет — это селектор LongList.

Код XAML

  1. <phone:PhoneApplicationPage 
    x:Class="LocalDBDemo.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
      xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      FontFamily="{StaticResource PhoneFontFamilyNormal}"
      FontSize="{StaticResource PhoneFontSizeNormal}"
      Foreground="{StaticResource PhoneForegroundBrush}"
      SupportedOrientations="Portrait" Orientation="Portrait"
      shell:SystemTray.IsVisible="True"> 
      <Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 
      <TextBlock Text="www.windowsapptutorials.wordpress.com" Style="  {StaticResource PhoneTextNormalStyle}" Margin="12,0" Foreground="#FF0C0CEC" FontSize="22"/> 
      <TextBlock Text="Local DB Demo" Margin="2,-7,7,0" Style="{StaticResource PhoneTextTitle1Style}" FontSize="68"/> 
    </StackPanel> 
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
      <TextBlock HorizontalAlignment="Left" Margin="132,173,0,0" TextWrapping="Wrap" Text="NO :" VerticalAlignment="Top"/>   <TextBox x:Name="notextbox" HorizontalAlignment="Left" Height="72" Margin="207,149,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="207"/> 
    <Button x:Name="createbtn" Content="Create DB" HorizontalAlignment="Left" Margin="19,306,0,0" VerticalAlignment="Top" Click="createbtn_Click"/> 
    <Button x:Name="Savebtn" Content="Save" HorizontalAlignment="Left" Margin="168,306,0,0" VerticalAlignment="Top" Width="107" Click="Savebtn_Click"/> 
    <Button x:Name="Readbtn" Content="Read" HorizontalAlignment="Left" Margin="275,306,0,0" VerticalAlignment="Top" Click="Readbtn_Click"/> 
    <Button x:Name="updatebtn" Content="Update" HorizontalAlignment="Left" Margin="19,378,0,0" VerticalAlignment="Top" Click="updatebtn_Click"/> 
    <Button x:Name="deletebtn" Content="Delete" HorizontalAlignment="Left" Margin="177,378,0,0" VerticalAlignment="Top" Click="deletebtn_Click"/> 
    <phone:LongListSelector SelectionChanged="studentlist_SelectionChanged_1" x:Name="studentlist" HorizontalAlignment="Left" Height="63" Margin="26,460,0,0" VerticalAlignment="Top" Width="253" Background="#FFE23232"/> 
    </Grid> 
      <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Address :" VerticalAlignment="Top" Margin="106,233,0,0" Grid.Row="1"/> 
      <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Name :" VerticalAlignment="Top" Margin="123,110,0,0" Grid.Row="1"/> 
      <TextBox x:Name="addresstxtbox" HorizontalAlignment="Left" Height="72" TextWrapping="Wrap" VerticalAlignment="Top" Width="207" Margin="218,208,0,0" Grid.Row="1"/> 
      <TextBox x:Name="nametxtbox" HorizontalAlignment="Left" Height="72" TextWrapping="Wrap" VerticalAlignment="Top" Width="207" Margin="220,85,0,0" Grid.Row="1"/> 
    </Grid> 
    </phone:PhoneApplicationPage> 

Теперь мы создадим два класса для создания моста между локальной базой данных и контекстом данных. Первый класс — это класс StudentDetails, который содержит свойства таблиц и столбцов, которые используются для создания базы данных. Следующий класс называется «StudentDataContext», который используется в качестве схемы для создания экземпляра.

Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите Добавить класс, как показано на следующем экране.

Добавить класс

Решение Исследовать

Измените имя класса на «StudentDetails» и нажмите «Добавить». Добавьте другой класс и назовите его «StudentDataContext», как показано ниже.

 
имя класса

Напишите следующий код для класса «StudentDetails». 

Код C #

  1. using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Data.Linq; 
    using System.Data.Linq.Mapping; 
    namespace LocalDBDemo 
    { 
     [Table] 
     publicclass StudentDetails 
     { 
      [Column(IsPrimaryKey=true,IsDbGenerated=true,CanBeNull=false,AutoSync=Aut oSync.OnInsert)] 
     publicint id 
     {get;set;} 
      [Column(CanBeNull = false)] 
      publicstring Name 
      { get; set; } 
      [Column(CanBeNull = false)] 
      publicint No 
      { get; set; } 
      [Column(CanBeNull = false)] 
      publicstring Address 
      { get; set; } 
      } 
    } 

Теперь напишите следующий код для «StudentDataContext». Он используется для разработки схемы базы данных для создания экземпляра. 

Код C # для 

  1. using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Data.Linq; 
    namespace LocalDBDemo 
    { 
      publicclass StudentDataContext:DataContext 
      { 
      public StudentDataContext(string connectionPath) 
      : base(connectionPath) 
      { 
    } 
    public Table<StudentDetails> Students 
    { 
      get
      { 
      returnthis.GetTable<StudentDetails>(); 
      } 
    } 

Проект базы данных теперь готов для хранения и извлечения. Перейдите на страницу MainPage.xaml.cs, чтобы выполнить операции CRUD. Создайте экземпляр базы данных с помощью следующего кода.

C # код для создания БД

  1. privatevoid createbtn_Click(object sender, RoutedEventArgs e) 
    { 
      using (StudentDataContext studentdb = new StudentDataContext(path)) 
      { 
      if (studentdb.DatabaseExists() == false) 
      { 
      studentdb.CreateDatabase(); 
      MessageBox.Show("Database create Successfully"); 
      } 
      else
      { 
      MessageBox.Show("Database Already Exists "); 
      } 
      } 
    } 

Создание (вставка) новых данных в изолированное хранилище
Далее мы будем вставлять новые данные. Создайте экземпляр для базы данных и другой экземпляр для таблицы. Как только мы получим пользовательский ввод, вставьте его в таблицу с помощью метода InsertOnSubmit и, наконец, отправьте данные с помощью метода SubmitChanges.

  1. privatevoid Savebtn_Click(object sender, RoutedEventArgs e) 
    { 
      using (StudentDataContext studetdb = new StudentDataContext(path)) 
      { 
      StudentDetails newdata = new StudentDetails 
      { 
      Name=nametxtbox.Text, 
      No=Convert.ToInt16(notextbox.Text), 
      Address=addresstxtbox.Text, 
      }; 
      studetdb.Students.InsertOnSubmit(newdata); 
      studetdb.SubmitChanges(); 
      MessageBox.Show("New Record Added Successfully"); 
      } 
    } 

Чтение данных из изолированного хранилища 
Далее мы будем читать данные из изолированного хранилища. Напишите следующий код.

Код C #

Читайте все данные из таблицы ученика. Напишите следующий код, используя запрос LINQ.

  1. public IList<StudentDetails> GetStudentDetails() 
    { 
      IList<StudentDetails> Studebtlist = null; 
      using (StudentDataContext studentdb = new StudentDataContext(path)) 
      { 
      IQueryable<StudentDetails> query = from student in studentdb.Students select student; 
      Studebtlist = query.ToList(); 
      } 
      return Studebtlist; 
    } 

Затем вызовите эту функцию, чтобы просмотреть все данные из таблиц.

Код C #
Добавьте пространство имен, используя System.Text; связать строку с помощью StringBuilder.

  1. privatevoid Readbtn_Click(object sender, RoutedEventArgs e) 
    { 
      IList<StudentDetails> Studentlist = this.GetStudentDetails(); 
      StringBuilder details = new StringBuilder(); 
      foreach (StudentDetails std in Studentlist) 
      { 
      details.AppendLine("Name:" + std.Name + "No:" + std.No + "Address:" + std.Address); 
      } 
      MessageBox.Show(details.ToString()); 
    } 

Далее мы будем обновлять данные. Выберите имя в длинном списке Slector (см. Розовое поле цвета в пользовательском интерфейсе). Получите имя, которое вы выбираете из селектора длинных списков, и назначьте его для selectedName, объявленного как открытая строка. Используя это имя, мы обновим значения. Введите следующий код, чтобы назначить выбранное имя.

  1. string selectedName = ""; 
    privatevoid studentlist_SelectionChanged_1(object sender, SelectionChangedEventArgs e) 
    { 
     selectedName = studentlist.SelectedItem.ToString(); 
    } 

Код C # для обновления

  1. privatevoid updatebtn_Click(object sender, RoutedEventArgs e) 
    { 
     using (StudentDataContext studentdb = new StudentDataContext(path)) 
     { 
     IQueryable<StudentDetails> query = from update in studentdb.Students where update.Name == selectedName select update; 
     StudentDetails updatevalue = query.FirstOrDefault(); 
     updatevalue.Name = nametxtbox.Text; 
     updatevalue.No =Convert.ToInt16( notextbox.Text); 
     updatevalue.Address = addresstxtbox.Text; 
     studentdb.SubmitChanges(); 
     } 
     MessageBox.Show("Details Updated"); 
    } 

Удаление данных из изолированного хранилища
Теперь мы удалим данные из изолированного хранилища выбранного учащегося из селектора LongList. Напишите следующий код. 

Код C # 

  1. privatevoid deletebtn_Click(object sender, RoutedEventArgs e) 
    { 
      if (selectedName == "") 
      { 
      MessageBox.Show("Select Name"); 
      } 
      else
      { 
      using (StudentDataContext studentdb = new StudentDataContext(path)) 
      { 
      IQueryable<StudentDetails> query = from std in studentdb.Students where std.Name == selectedName select std; 
      StudentDetails delete = query.FirstOrDefault(); 
      studentdb.Students.DeleteOnSubmit(delete); 
      studentdb.SubmitChanges(); 
      MessageBox.Show("Deleted Successfully"); 
      } 
      } 
    } 

Все функции завершены. Теперь запустите приложение, нажав клавишу F5, и посмотрите результат. 

выход

результат