Genel

Silverlight ve SQL

Silverlight, Flash gibi client tarafında çalıştığı ve asıl amacının web hizmetlerine ulaşmak olduğu için web tarafındaki veritabanı sunucusuna direk olarak ulaşması güvenli olmadığından yasaklanmıştır. Veritabanından okuma yapabilmek için aracı yöntemlere ihtiyaç duymaktadır. Örneğin veritabanından sorgulamaları yapmış olan bir asp veya php sayfası olabilir. Silverlight Webclient Sınıfı ile web sayfasına erişip okuyabilir.

Bunun Silverlight tarafında nasıl yapıldığına dair bir örnek çalışmayı izah etmeye çalışacağım. Fakat sorgulamayı yapacak olan web sayfası tercihe bağlı olduğundan bu konunun dışındadır. Ben örnekte php kullandım ve resimlerin url adreslerini veritabanından okutarak getirdim.

1) Yeni bir Silverlight projesi oluşturuyoruz.

2) Veritabanından okuduğumuz nesneleri Silverlight solution içerisinde farklı bir class oluşturarak atamak ve ihtiyaç olduğunda çağırmak üzere delegelerden faydalanıyoruz.

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace KapıdaPaket
{
    public class Urun
    {
        public string id { get; set; }
        public string stok_adi { get; set; }
        public string fiyat { get; set; }
        public string resim { get; set; }
    }
}

3) Sınıfımızı yapıcı metodla (constructor) çağırdıktan sonra sınıftan alacağımız değerleri bir listeye atamalıyız. Geri kalan işlemleri burada yazabileceğimiz gibi ben her işleme ayrı bir metod yazmayı tercih ediyorum. Geridönüş değeri üretmeyen Urunlistele() metoduna yönlendiriyorum. u olarak tanımladığım değişken bir sonraki satıra geçmemi sağlayacak.

Urun t = new Urun();
List<Urun> kaynak = new List<Urun>();
int u=0;
public MainPage()
{
	InitializeComponent();
        Urunlistele();
}

4) Urunlistele() metodumda WebClient sınıfını yapıcı metodla çağırım yapacağı olayları belirteceğim. Sayfayı indirmesini istiyorum. Yapmak istediğim işlemleri indirme tamamlandıktan sonra yapılmak üzere DownloadStringCompleted olayı altında yazıyorum. Veritabanından çekerken kullanmayacağım karakterler ile ayırdığım satır ve kolonları bir string dizisine atayarak ayırdığım şekilde parçalıyorum. Parçalayarak anlamlı hale getirdiğim bu verileri delegelere atayarak değişkenmiş gibi faydalanacağım.

void Urunlistele()
        {
            WebClient client = new WebClient();
            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
            client.DownloadStringAsync(new Uri("http://kapidapaket.com/Urunlistele.php"));
        }

        void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            WebClient client = (WebClient)sender;
            client.DownloadStringCompleted -= new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
            string[] Rows= e.Result.Split('%');
            for (int i = 0; i < satırlar.Length; i++)
            {
                t.id = Rows[i].Split('é')[0];
                t.stok_adi = Rows[i].Split('é')[1];
                t.fiyat = Rows[i].Split('é')[2];
                t.resim = Rows[i].Split('é')[2];
                kaynak.Add(t);
                u++;
            }
        }

Veritabanından sadece resim url adreslerini çekerek atadığım bu örnek sayfaya buradan ulaşabilirsiniz.

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir