23 Aralık 2012 Pazar

Windows 8 Uygulamalarında Veri Tabanı Kullanımı

Yorum Bırak


     Merhaba arkadaşlar, şu ana kadar Windows 8 uygulamalarında basit olarak neler yapabileceğimizi gördük. Bu haftadan itibaren uygulamalarımız için vazgeçilmez olan veritabanı kullanımından bahsedeceğim. Veritabanı kullanarak daha geniş uygulamalar yapabilir, kullanıcılara daha çok bilgi aktarımı sağlayabiliriz.


     Bildiğim kadarı ile Windows 8 uygulamalarında direk olarak yerel veritabanı bağlantısı yapılmıyor. Bu uygulamalar hem tabletlerde hem de bilgisayarlarda çalışacağından dolayı stabil bir sistemimizin olması gerekiyor. Windows 8 uygulamalarında veritabanı kullanmak istiyorsak bunu iki şekilde yapabilmemiz mümkün olabilir. Bunlarda birisi web servis kullanmak, ikincisi de Sqlite veritabanı kullanmak.




     Sizlere kısaca web servislerden bahsetmek istiyorum. Web servis uygulamalarınızın verilerine üçüncü şahıslar tarafından kolayca erişilebilmesi için uygulamanızın dışarı açılmasıdır. Kullanıcılar bu web servislere bağlanarak basit isteklerle istenilen bilgiye ulaşabilirler.


     Şimdi sizlere web servis kullanarak nasıl bir Windows 8 uygulaması geliştirebileceğinizden bahsedeceğim. Bu uygulamada hazır bir web servis kullanacağız. Bu örnekten bakarak sizler de kendi uygulamalarınız için hazırlamış olduğunuz web servisleri kullanabilirsiniz.





     Öncelikle boş bir Windows 8 uygulaması açıyoruz. Daha sonra referanslar kısmından servis referansı ekleye basıyoruz. Ardından aşağıda vereceğim linkteki web servis adresini açılan pencereye yazıyoruz. Otomatik olarak metodları görecektir. Servis ismini de verip tamamlıyoruz ve Visual Studio gerekli dosyaları bizim için oluşturuyor.








     Sayfamızın tasarımını da aşağıdaki gibi ayarlıyoruz:

 <Page  
   x:Class="App3.MainPage"  
   IsTabStop="false"  
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
   xmlns:local="using:App3"  
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
   mc:Ignorable="d">  
   <Grid>  
     <Grid.Background>  
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">  
         <GradientStop Color="Black"/>  
         <GradientStop Color="#FFD81337" Offset="1"/>  
       </LinearGradientBrush>  
     </Grid.Background>  
     <StackPanel Orientation="Horizontal">  
       <TextBlock HorizontalAlignment="Left" Height="68" TextWrapping="Wrap" Text="Use of Whether Web Service" VerticalAlignment="Top" Width="1306" FontFamily="Verdana" FontSize="48" Margin="38,20,0,0"/>  
     </StackPanel>  
     <StackPanel Orientation="Horizontal">  
       <TextBox Name="inputZipCode" HorizontalAlignment="Left" Height="58" Margin="10,127,0,0" VerticalAlignment="Top" Width="477" FontFamily="Verdana" FontSize="36"/>  
       <Button Name="GoButton" Content="Go" HorizontalAlignment="Left" Height="58" Margin="40,127,0,0" VerticalAlignment="Top" Width="136" FontFamily="Verdana" FontSize="36" Click="GoButton_Click"/>  
     </StackPanel>  
     <StackPanel Orientation="Horizontal">  
       <TextBlock HorizontalAlignment="Left" Height="27" Margin="38,90,0,0" TextWrapping="Wrap" Text="Enter the zip code below (U.S. only, e.g. 48653)" VerticalAlignment="Top" Width="494" FontFamily="Verdana" FontSize="20"/>  
     </StackPanel>  
     <StackPanel Orientation="Horizontal">  
       <Image Name="myimage" HorizontalAlignment="Left" Height="200" Margin="10,190,0,0" VerticalAlignment="Top" Width="737" Source="{Binding imageurl}"/>  
     </StackPanel>  
     <StackPanel>  
       <TextBlock x:Name="resultCityState" Height="100" HorizontalAlignment="Left" TextWrapping="Wrap" FontFamily="Verdana" Width="300" FontSize="36" Margin="15,400,0,0" />  
     </StackPanel>  
     <StackPanel Orientation="Vertical">  
       <TextBlock x:Name="resultDetails" HorizontalAlignment="Left" Height="365" Margin="30,400,0,-39" TextWrapping="Wrap" VerticalAlignment="Top" Width="704" FontFamily="Verdana" FontSize="25"/>  
     </StackPanel>  
   </Grid>  
 </Page>  

       Bu web servisi kullanabilmek için c sharp tarafında using App3.webservisisminiz "namespace" bilgisini .cs uzantılı dosyaya eklememiz gerekiyor, "webservisiminiz" yazan kısıma kendi verdiğiniz web servis ismi gelecek. Bundan sonunda .cs uzantılı dosyamız aşağdaki gibi olacak şekilde düzenliyoruz:


 using System;  
 using System.Collections.Generic;  
 using System.IO;  
 using System.Linq;  
 using Windows.Foundation;  
 using Windows.Foundation.Collections;  
 using Windows.UI.Xaml;  
 using Windows.UI.Xaml.Controls;  
 using Windows.UI.Xaml.Controls.Primitives;  
 using Windows.UI.Xaml.Data;  
 using Windows.UI.Xaml.Input;  
 using Windows.UI.Xaml.Media;  
 using Windows.UI.Xaml.Navigation;  
 using App3.WeatherService;  
 // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238  
 namespace App3  
 {  
   /// <summary>  
   /// An empty page that can be used on its own or navigated to within a Frame.  
   /// </summary>  
   public sealed partial class MainPage : Page  
   {  
     public MainPage()  
     {  
       this.InitializeComponent();  
     }  
     /// <summary>  
     /// Invoked when this page is about to be displayed in a Frame.  
     /// </summary>  
     /// <param name="e">Event data that describes how this page was reached. The Parameter  
     /// property is typically used to configure the page.</param>  
     protected override void OnNavigatedTo(NavigationEventArgs e)  
     {  
     }  
     private async void GoButton_Click(object sender, RoutedEventArgs e)  
     {  
       WeatherSoapClient proxy = new WeatherSoapClient();  
       WeatherReturn result = await proxy.GetCityWeatherByZIPAsync(inputZipCode.Text);  
       ForecastReturn fr = await proxy.GetCityForecastByZIPAsync(inputZipCode.Text);  
       Forecast[] f = fr.ForecastResult;  
       if (result.Success)  
       {  
         resultCityState.Text = String.Format("{0}, {1}", result.City, result.State);  
         resultDetails.Text = String.Format  
           ("\n\nConditions - {0} \n\nTemperature - {1} \n\nRelative Humidity - {2} \n\nWind - {3} \n\nPressure - {4} -   
            \n\nPressure - {5} - \n\nWind Chill - {6} - \n\nVisibility - {7}",  
           result.Description, result.Temperature, result.RelativeHumidity, result.Wind, result.Pressure, fr.WeatherStationCity, result.WindChill, result.Visibility);  
       }  
       GetWeatherInformationResponse result1 = await proxy.GetWeatherInformationAsync();  
       WeatherDescription[] r = result1.GetWeatherInformationResult;  
       foreach (WeatherDescription d in r)  
         if (d.WeatherID == result.WeatherID)  
         {  
           image i = new image();  
           i.imageurl = d.PictureURL;  
           myimage.DataContext = i;  
           break;  
        }  
     }  
   }  
   public class image  
   {  
     public string imageurl;  
     {  
       get;  
       set;  
     }  
   }  
 }  

     Bu kod kısmını biraz açıklamak istiyorum. Web servisten gelecek olan bilgileri ekrana yazdırıyoruz. Hava durumunun resmi, şehir ismi, sıcaklık bilgisi gibi verileri web servisten alıp bunları tasarım tarafında koyduğumuz 'textlere' yazdırıyoruz. Uygulamayı çalıştırdığımızda genel görünüm aşağıdaki gibi olacak:


     Haftaya veritabanı işlemlerine kaldığımız yerden devam edeceğiz. İyi kodlamalar :)



0 yorum:

Yorum Gönder