Makale Özeti

DA, Windows CE tabanlı bir uygulamanın uzaktaki bir SQL Server veritabanından veri alabilmesini ve gönderebilmesini sağlar.

Makale

Remote Data Access (RDA)

RDA, Windows CE tabanlı bir uygulamanın uzaktaki bir SQL Server veritabanından veri alabilmesini ve gönderebilmesini sağlar.

Mobil uygulamalar çalışabilmeleri için SQL Server veritabanında bulunan kurumsal verilere gereksinim duyabilirler. RDA, özellikle statik nitelikli kurumsal verilerin mobil cihaza taşınabilmesi için geliştirilmiştir. Örneğin uygulamanın başlayabilmesi için başlangıç değerlerine gereksinimi olabilir ve bu değerlerin mobil uygulama tarafında kullanılırken değişikliğe uğratılmadıkları için SQL Server’e geri gönderilmesi gerekmeyebilir. Bu durumda ana verilerin tutulduğu SQL Server’de veriler değişmediği sürece verileri yeniden almaya gerek yoktur. Diğer bir durum ise başlangıçta olmayıp da mobil uygulama tarafından oluşturulan verilerin SQL Server’e gönderilmek istenmesidir. Örneğin tütün eksperleri için geliştirilen bir mobil uygulama. Eksper incelediği tütünlere ilişkin bilgileri mobil uygulamaya girer ve bir butona basarak bu bilgileri merkezde bulunan SQL Server’e gönderir. Bu sayede merkezdekilerin eksperin gelmesini beklemelerine gerek kalmaz. Bu örnek kullanılmakta olan bir projeye ilişkindi. Benzer şekilde sigorta eksperleri için de bir uygulama geliştirilebilir. Şu an sigorta şirketleri bu durumun farkına varmış değiller. Masaüstü ya da web uygulamaları geliştirerek işlerini hızlandırmaya çalışıyorlar, eksperleri işlerini elektronik ortamda yürütmeleri için zorluyorlar fakat mobil uygulamaları kullanmayı henüz nedense düşünmüyorlar. Ya da daha sık ve çok veri oluşturulan bir uygulama olabilir. Bu durumda veriler önce SQL CE veritabanına yazılır ve belirli aralıklarla merkezdeki SQL Server’e gönderilir. Merkezdeki başka bir uygulama da bu gelen verileri işler.

Olası uygulama çeşitlerini arttırabiliriz. Örneğin diğer bir uygulama SQL Server’deki verileri SQL CE veritabanına çeker, veriler işlenir, gerekli değişiklikler yapıldıktan sonra yeni verilerle birlikte SQL Server’e geri gönderilir. Buna en iyi örnek ise sürekli dağıtım yapan şirketleri verebiliriz. Örneğin günde 20-30 markete mal götürenler. Sabah yola çıkarken o gün gidilecek marketler ve teslim edilecek mallara ilişkin bilgiler cihaza yüklenir ve gün boyunca teslimat yapıldıkça- ki sabahki plana uymayan durumlar da olabilir, veriler SQL Server’e gönderilerek merkezde anlık bilgilerin tutulması sağlanabilir.

SQL Server veriler üzerinde yapılan değişikliklerin izini tutmaz. Dolayısıyla, mobil uygulama SQL Server’deki verilere gereksinim duydukça önceki aldığı verileri yani tabloyu silmek ve yenisini çekmek zorundadır.

RDA, SQL Server ile HTTP’yi kullanarak iletişim kurar ve Internet Information Services’i (IIS) kullanır. Dolayısıyla RDA, IIS’in kullanıcı doğrulama (authentication) ve yetkilendirme (autherization) servislerini kullanır.

Bantgenişliği gereksinimini azaltmak için RDA gönderilen verinin daha az olması için verileri sıkıştırır. Bağlantının kaybolduğu durumlarda RDA, sinyali görene kadar bekler ve başarılı olarak son gönderilen veriden itibaren kalanları göndermeye başlar.

RDA, verileri SQL Server ve SQL Server CE arasında iletebilmek için üç alternatif sunar. Verileri SQL Server’den çekebilmek için “pull“, değişiklikleri SQL Server’e geri gönderebilmek için “push“ ve SQL sorgularını sunucuda çalışmalarını sağlamak için gönderme işini yapan “submit“. Tüm bu işlemleri yapabilmek için System.Data.SqlServerCe.SqlCeRemoteDataAccess sınıfı kullanılır. Şimdi sırayla bu metotları inceleyelim.

Pull Metodu
Uygulama, verilerin sunucudan download edilmesini gerektiriyorsa bu metot kullanılır. Bu veriler statik veriler olup da sunucuya geri gönderilmeyebileceği gibi, mobil uygulama tarafında değişikliğe uğratılıp, son hallerinin sunucuya geri gönderilmesi de gerekebilir. İkinci durum söz konusuysa yani veriler mobil uygulamada değişikliğe uğratılıyorsa, verilerin tümü yeniden geri gönderilmez, sadece değişikliğe uğrayanlar geri gönderilir. Bunu sağlamak için ise “Track“ özelliğinden yararlanılır.
rda.Pull("Kullanicilar", "SELECT * FROM users WHERE soyad like ‘ÖZKAN’;", baglantiCumlecigi, RdaTrackOption.TrackingOn);

Yukaridaki koddaki "Kullanicilar" , sorgu sonucunda SQL Server’den dönecek olan verilerin mobil uygulama üzerinde tutulacağı yerel tablonun adıdır. Uygulama birden fazla tabloya gereksinim duyuyorsa her tablo için ayrı bir pull metodu gerekir. Pull metodu içerisinde belirtilen tablo daha önce başka bir pull metodu sonucunda oluşturulmuş ve yok edilmemiş bir tablo ise uygulama sorun verecektir. Bu yüzden pull metodunu kullanmazdan önce eski tablolar yok edilmelidir.

“Track” özelliği kullanılırsa SQL Server CE, yerel tablo üzerinde yapılan ekleme, silme ve güncellemelerin izini tutar. Daha sonra push metodu çağrılırsa sadece değişikliğe uğrayan veriler SQL Server’e geri gönderilir.

Push Metodu
Push metodu, pull metoduyla SQL Server CE’ye alınan verilerin değişikliğe uğratıldıktan sonra SQL Server’e geri gönderilebilmesi için kullanılır. Dolayısıyla push metodunun ilişkili olduğu ve öncesinde çağrılan pull metodunun, track özelliği olmalıdır.

SQL Server, veriler pull metodu ile çekilirken lock uygulamaz. Bu yüzden eğer veriler birden çok mobil cihaz tarafından çekiliyorsa verilerin SQL Server’e geri gönderilmesi ile sorun çıkabilir. Verileri SQL Server’e son gönderen mobil uygulamanın verileri ondan önce gönderilenleri yok eder.

rda.Push("Patients", baglantiCumlecigi, RdaBatchOption.BatchingOn);

SubmitSql Metodu
Push metodunda önceden yereldeki bir tabloya alınıp değişikliğe uğramış veriler SQL Server’e gönderiliyordu, SubmitSql metodunda ise veri gönderilmeyip sql sorgusu gönderilir ve bu sorgunun SQL Server’de çalışması sağlanır.

Verilerin başlangıçta SQL Server’den alınıp sonrasında mobil uygulamada değişikliğe uğradığı durumlar için pull ve push çifti çözüm sunarken verilerin hiç yokken mobil uygulama tarafından üretildiği durumlarda bu verilerin SQL Server’e gönderilmesi için SubmitSql metodu kullanılır.

SubmitSql metodu ile insert ve update gibi sql sorguları gönderilebildiği gibi stored procedure’lerin çalışması sağlanabilir fakat bu stored procedure’lerden geriye veri dönmez.

SubmitSql metodunun kullanımı şu şekildir:

Object.SubmitSQL(SqlSorgusu, OleDbBaglantiCumlecigi)

Pull, Push ve SubmitSql metotlarının sorunsuz çalışabilmeleri için istemci durumundaki mobil uygulamaların IIS ve SQL Server tarafından belirtilen güvenlik kriterlerini sağlamaları gerekir.