Windows Phone 7 Database

Waktu iseng2 browsing di codeplex, ada project menarik yang muncul di listnya, yaitu Windows Phone 7 Database, menarik karena sejauh ini, penyimpanan data yang tersedia hanyalah IsolatedStorage dan untuk storage dan retreive data menggunakan LINQ, sama mudahnya seperti menggunakan LinqToSQL

Step 1 : Cara menggunakannya mudah sekali, tapi yang harus dilakukan sebelum ini adalah mendownload projectnya dari link berikut, lalu build menggunakan Visual Studio 2010

Step 2 : Selanjutnya cobalah dengan membuat sebuah project Windows Phone Application baru, lalu diikuti dengan menambahkan reference ke SilverlightPhoneDatabase

image

image

selanjutnya akan kita coba untuk membuat database, membuat table, mengiesi table, dan mengambil hasilnya, agar sederhana untuk seluruh kegiatan diatas kita hanya akan bekerja di MainPage.xaml dan MainPage.xaml.cs

Step 3 : kita memerlukan beberapa button dan listbox untuk menampilkan data, copy script xaml berikut ini ke bagian “<!--ContentPanel - place additional content here—>”

<StackPanel Grid.Row="1">
   <Button Content="Create Database" Click="BtnCreateDatabase_Click"/>
   <Button Content="Fill Random Data" Click="BtnFillRandomData_Click"/>
   <Button Content="Show Data" Click="BtnShowData_Click"/>
   <ListBox ItemsSource="{Binding}">
      <ListBox.ItemTemplate>
         <DataTemplate>
            <Border BorderBrush="White" BorderThickness="0 1 0 0">
               <StackPanel>
                  <TextBlock Text="{Binding Path=ID}"/>
                  <TextBlock Text="{Binding Path=AnInteger}"/>
                  <TextBlock Text="{Binding Path=ADouble}"/>
                  <TextBlock Text="{Binding Path=ADateTime}"/>
                  <TextBlock Text="{Binding Path=AString}"/>
               </StackPanel>
            </Border>
         </DataTemplate>
      </ListBox.ItemTemplate>
   </ListBox>
</StackPanel>

Step 4 : sebelum mulai, kita akan mendefinisikan terlebih dahulu tabel yang ada pada database. sama seperti LinqToSQL tabel didefinisikan sebagai class, sehingga kita tidak perlu bergelut lagi dengan sintaks SQL. untuk keperluan demo ini, aku menggunakan class berikut, perhatikan bahwa seluruh field yang ada perlu dibuat sebagai properties

public class TestObject
{
   public Guid ID { get; set; }
   public int AnInteger { get; set; }
   public double ADouble { get; set; }
   public DateTime ADateTime { get; set; }
   public string AString { get; set; }
}

Step 5 : kita akan mulai dengan membuat database atau load database yang sudah ada terlebih dahulu. tidak seperti SQL atau SQLite, untuk Silverlight Phone Database ini kita tidak dapat melihat filenya secara langsung dan mengubahnya menggunakan tools, filenya akan disimpan di dalam IsolatedStorage. saat blog ini ditulis, fasilitas untuk menyimpan databasenya dalam bentuk xml dan bisa di load dan write ke desktop masih dalam tahap RTM, mungkin tahun depan fitur ini bisa digunakan.

  • Pertama-tama buatlah sebuah variable SilverlightPhoneDatabase.Database yang akan menjadi object utama yang merepresentasikan database
  • Selanjutnya pada method BtnCreateDatabase_Click:
    • Cek terlebih dahulu apakah sudah ada database dengan id nama database yang sama di isolatedstorage saat ini dengan Method DoesDatabaseExists
    • jika ada, load database ke memory dengan method OpenDatabase
    • Jika tidak ada, buat lah database baru dengan id yang ada menggunakan method CreateDatabase, lalu diikuti dengan membuat tabel sesuai dengan class yang dibuat sebelumnya dengan method CreateTable, dan terakhir jangan lupa untuk melakukan Save.
SilverlightPhoneDatabase.Database MyPhoneDatabase = null;

private void BtnCreateDatabase_Click(object sender, RoutedEventArgs e)
{
   string databasename = "test";
   if (SilverlightPhoneDatabase.Database.DoesDatabaseExists(databasename))
   {
      MyPhoneDatabase 
         = SilverlightPhoneDatabase.Database.OpenDatabase(databasename);
   }
   else
   {
      MyPhoneDatabase 
         = SilverlightPhoneDatabase.Database.CreateDatabase(databasename);
      MyPhoneDatabase.CreateTable<TestObject>();
      MyPhoneDatabase.Save();
   }
}

Step 6 : sekarang saatnya kita mencoba untuk menginput data ke database, untuk melakukan input data, kita hanya perlu membuat object baru dari data yang ingin dimasukkan dan menginputkannya ke tabel di database dengan method Add, dan jangan lupa juga untuk memanggil Save seperti sebelumnya.

PS : untuk datanya diisi dengan data random karena aku terlalu malas membuat UInya, feel free jika ingin membuat UI interface di windows phone applicationnya Open-mouthed smile

private void BtnFillRandomData_Click(object sender, RoutedEventArgs e)
{
   if (MyPhoneDatabase == null)
      MessageBox.Show("Database belum ada, coba Load atau Create Database baru");
   else
   {
      TestObject newobject = new TestObject();
      newobject.ID = Guid.NewGuid();
      newobject.ADateTime = DateTime.Now;
      newobject.AnInteger = DateTime.Now.Second;
      newobject.ADouble = (DateTime.Now.Second * DateTime.Now.Minute) / 100;
      newobject.AString = "Test " + DateTime.Now.ToLongTimeString();

      MyPhoneDatabase.Table<TestObject>().Add(newobject);
      MyPhoneDatabase.Save();
      MessageBox.Show("Penambahan data berhasil"); 
    }
}

Step 7 : untuk menampilkan datanya, kita akan menggunakan ObservableCollection, yang di binding ke ListBox, dan observable collection tersebut akan digunakan sebagai DataContext dari MainPage.xaml untuk itu kita perlu menambahkan sesuatu di Constructornya sebagai berikut:

public ObservableCollection<TestObject> ListOfTestObject { get; set; }
public MainPage()
{
   InitializeComponent();

   ListOfTestObject = new ObservableCollection<TestObject>();
   this.DataContext = ListOfTestObject;
}

jangan lupa untuk menambahkan ini di bagian atas, ObservableCollection ada di sini

using System.Collections.ObjectModel;

dan untuk menampilkan datanya, kita perlu mengisi method BtnShowData_Click sebagai berikut,

  • pertama-tama hapus terlebih dahulu seluruh data yang ada di ListOfTestObject
  • lakukan query untuk seluruh data di Tabel
  • lalu pindahkan datanya satu persatu ke dalam ListOfTestObject
private void BtnShowData_Click(object sender, RoutedEventArgs e)
{
   ListOfTestObject.Clear();

   var data = MyPhoneDatabase.Table<TestObject>();
   foreach (TestObject testobj in data)
   {
      ListOfTestObject.Add(testobj);
   }
}

Oops, hampir lupa, jika program ini dijalankan, hasilnya akan menjadi seperti di sebelah kiri, mengapa ? karena kita belum mendefinisikan data apa yang ingin ditampilkan pada deklarasi ListBox di xamlnya. untuk memperbaikinya, tambahkan deklarasi dibawah ini, sehingga jika di run kembali data yang ditampilkan akan sesuai yang diinginkan

<ListBox ItemsSource="{Binding}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Border BorderBrush="White" BorderThickness="0 1 0 0">
        <StackPanel>
          <TextBlock Text="{Binding Path=ID}"/>
          <TextBlock Text="{Binding Path=AnInteger}"/>
          <TextBlock Text="{Binding Path=ADouble}"/>
          <TextBlock Text="{Binding Path=ADateTime}"/>
          <TextBlock Text="{Binding Path=AString}"/>
        </StackPanel>
      </Border>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

image

image
“PS : Seluruh programming yang dilakukan diatas bukanlah good practice programming yang baik, namun ini cara yang paling cepat dan sederhana untuk menerangkan mengenai Windows Phone 7 Database"
Share this post: | | | |
Published Friday, November 25, 2011 9:33 AM by De_Joker
Filed under: , ,

Comments

# Windows Phone 7 Database - De_Joker

Friday, November 25, 2011 9:40 AM by Windows Phone 7 Database - De_Joker

Pingback from  Windows Phone 7 Database - De_Joker

Powered by Community Server (Commercial Edition), by Telligent Systems