Ado.Net ile SQL Select Sorgusu Çalıştırma
Yazılım uzmanı meslektaşlarıma yeniden merhabalar, uzman diyorum çünkü Ado.Net ile C#.Net programlama dilinde uzmanlık yoluna bir adım daha yaklaşıyorsunuz. :)
Bir önceki Ado.Net makalemizde Ado.Net'in ne olduğu,nasıl bir yapıysa sahip olduğu ve mimarilerini teorik halinde görmüştük.Bu makalemizde ise ilk örnek Ado.Net uygulamamızı gerçekleştireceğiz.
Veritabanı sunucusu olarak Microsoft SQL Server 2008 R2 kullanacağız ve örnek veritabanımız ise daha önce bahsettiğim BakkalDB'yi kullanacağız.BakkalDB veritabanımızın script dosyasını buradan indirebilirsiniz...
Ado.Net konusunda ilk öğreneceğimiz konu Select sorgusu olacak,örneklerimize kolaydan karmaşığa doğru devam edeceğiz.
Öncelikle SQL Server'ı açıyoruz ve sisteme giriş yapıyoruz,örneklere başlamadan önce Ado.Net için hat safhada önemli olan SQL Connection String (bağlantı cümleciğini) oluşturmamız gerekiyor.
SQL Connection String'i bir önceki makalemizden hatırlarsak Ado.Net'in veritabanı sunucusu arasında iletişim kurduğu bağlantı bilgilerini içerir demiştik ve birden fazla bağlantı cümleciği olduğu için en uygununu bulmak zorundayız.
SQL Connection String'in yapısı şu şekildedir:
Server=; DataBase=; UID=; PWD=;
Server deyimi için eğer bilgisayarınızda kurulu bir SQL Server'ın herhangi bir sürümü varsa ve eğer full sürüm kullanıyorsanız nokta (.) işareti veya "localhost" ya da bilgisayarınızın ad değerini verebilir ya da SQL Express kullanıyorsanız
.\SQLExpress (nokta\SQLExpress)
ya da
localhost\SQLExpress
ya da
bilgisayaradi\SQLExpress
değerini verebilirsiniz.
Kullanacağınız veritabanı sunucusunu hosting gibi uzak bir sunucuda yer alıyorsa o sunucunun IP adresinizi
yazmanız yeterlidir.
Çok önemli bir konu olan SQL Server Connection String için bilgisayarınızda ya da başka bir sunucuda veritabanınız
yoksa bu makaleyi inceleyerek bilgisayarınıza SQL Server kurmanız gerekmektedir.
Makalemize devam edersek; BakkalDB veritabanımızı kendi SQL sunucumuza taşıdıktan sonra DataBase deyimi karşılığına BakkalDB yazmanız yeterli olacaktır.
UID ve PWD değerlerine ise SQL Server'ı açtığınızda karşınıza gelen kullanıcı adı ve şifrenizi yazmanı yeterlidir,eğer
herhangi bir kullanıcı adı ya da şifre belirlemeden login oluyorsanız bu Windows Authatication (Windows Yetkisi ile Oturum Açma) yapıyorsunuz demektir ki bunu da tavsiye etmem! Windows Authatication ile oturum açma işlemi uyguluyorsanız aşağıdaki şekilde bir Connection String kullanacaksınız:
Data Source=localhost\SQLSERVER;Initial Catalog=; Integrated Security=True;" providerName="System.Data.SqlClient"
SQL Connection String ile ilgili net bir sonuca ulaştığımızı varsayarsak şimdi SQL Server Management Studio'dan New Query penceresinden Select GetDate() sorgumuzu çalıştıralım:
GetDate() metodu bize SQL Server'ın içinde bulunduğu sunucunun (veya kendi localhostumuzun) tarih ve saatini verir,bu sorgudan dönen sonucu C# ve Ado.Net ile kullanarak programımızda göstereceğiz.
Şimdi Visual Studio'yu açıyor ve yeni bir Windows Form uygulaması oluşturuyoruz:
Oluşturduğumuz forma ToolBox penceresinden bir buton sürükleyip bıraktıktan sonra aşağıdaki bir tasarım görüntüsü elde ediyoruz:
Burada yapmak istediğimiz; butona tıkladığımızda Ado.Net arka planda veritabanı sunucusunun GetDate() metodu ile vereceği tarihi Label kontrolüne yazdırmak olacak, o yüzden butonumuza çift tıklayarak kod yazmaya başlıyoruz.
Konuya başlamadan önce string bir değişken belirliyoruz, bu değişken değerini Ado.Net ile çalıştıracağımız sorgu sonucunda değer kazanacak..
Ado.Net'in yapısı itibariyle ilk önce yapacağımız bir bağlantı köprüsü kurmak olacak,bu köprü SQL Connection Stringi kullanarak veritabanı sunucumuz ile iletişime geçecek:
SqlConnection olarak ifade edilen köprümüzü kurduktan sonra sıra geldi sorgumuzu çalıştırma konusunda, bu defa SQL sorgumuzu koprünün üzerinden karşıya geçiriyoruz:
Elbette bu işlem için yalnızca bağlantının varolması yetmiyor,ayrıca bağlantının açık olması gerekmektedir.O yüzden SqlConnection sınıfının Open() metodunu kullanarak SqlConnection String'de yer alan bağlantı bilgilerini çalıştıyoruz:
Açılan bağlantı ile SQL sunucusundan gelen satırları SqlDataReader nesnesine yüklüyoruz, bu nesne tüm sonuçları kendisinde barındıracak:
SQL sunucu bağlantımızı açtıktan sonra geldik Connected mimarinin sorgu sonucu okuma tekniğine...Ado.Net ile select sorgusu çalıştırıldıktan sonra tıpkı veritabanında sorgulama yaptığımız gibi bir tabloyla karşılaşırız ve sorgu sonucu tek bir satır olabildiği gibi sorgunun tipine ve tablonun içindeki veri sayısına göre yüz binlerce dahi olabilir ya da sorgu sonucunda hiçbir sonuç gelmeyebilir de, biz yazılımcılar olarak programın doğru çalışabilmesi için mümkün olabildiğince proaktif (önceden önlem alarak davranmak) davranmak zorundayız.
Dolayısıyla SqlConnection sınıfının HasRows (satır varsa) property'sini kullanacağız:
Ardından sorgu sonucunda birşeyler geliyorsa Read() metodu ile sırasıyla her satırı denetleyeceğiz,bunun için bir döngü kullanmamız gerekiyor ve while döngüsü bu iş için biçilmiş kaftan diyebiliriz. :)
ve gelen sorgu sonucunu konunun başında belirlediğimiz string değişkenimize atıyoruz.
While döngüsü ile veritabanından gelen sonucu çektikten sonra artık açık tuttuğumuz bağlantımızı Close() metodu ile kapatıyoruz:
Buraya kadar Ado.Net ile tüm işlemlerimizi gerçekleştirdik ve değişkenimize değer kattıktan sonra MessageBox.Show() metodu ile sonucu ekrana yansıtalım:
Projemizi çalıştırıyoruz ve butona tıklıyoruz:
Gördüğünüz gibi oldukça kolay bir kullanım söz konusu,elbette ilk kez Ado.Net öğreniyorsanız bu size biraz zor gelebilir ancak zamanla kavrayabileceğiniz bir konu olduğunu anlayacaksınız.Tabi ki bol pratik yaparsanız!
Sıra geldi Ado.Net kullanımı ile ilgili önemli bir noktaya..
Ado.Net yapısı gereği sunucu iletişimi kurarak işlemler gerçekleştirirken oldukça hataya açık bir şekilde çalışmaktadır,dolayısıyla Ado.Net kullanımı ile ilgili try-catch-finally hata denetim sistemini sürekli kullanmamız gerekmektedir aksi halde sorgularımızı Ado.Net ile çalıştırmak istediğimiz halde neden çalışmadığını anlayabilme konusunda gereksiz yere zamanımızı harcamak zorunda kalırız.
Try-Catch-Finally kullanarak Ado.Net kodlarımızı aşağıdaki şekilde yeniden düzenliyoruz:
Klasik biçimde yazdığımız kodlara bakarsak SqlConnection nesnemizi try bloğu üzerine taşıdık,bunun nedeni SqlConnection sınıfına ait bağlantı açma ve kapama işlemlerini try-catch yapısının farklı bloklarımızı kullanmamızdan kaynaklanmaktadır.Bu şekilde bir kullanım ile projelerimize doğru bir şekilde yön vermiş oluruz ve mümkünse her sorgu başına sık sık kullanmanızı öneririm zira try-catch hata yakalama sistemi kullanılmayan Ado.Net işlemlerinda ortaya çıkabilecek problemler saçınızı başınızı yolduracak niteliklerde olabilir. :)
Şimdi ise konumuzu biraz daha zorlaştırarak tablolar ile çalışma konusuna geliyoruz, formumuza yeni bir buton daha ekliyoruz ve BakkalDB veritabanımızdaki ilk 3 müşterinin isimlerini getireceğiz...
Öncelikle SQL Server Management Studio ile sorgumuzu çalıştıralım ve sonucu görelim:
Yeniden Visual Studio'ya dönüyor, butonumuza çift tıklayarak click eventine geçiyoruz ve müşteri listesini tutacağımız boş bir string tipte değişken tanımlıyoruz:
Ardından bir SqlConnection nesnesi oluşturuyoruz ve try-catch-finally bloklarımızı kuruyoruz:
SqlCommand ile sorgumuzu hazırlıyoruz ve bağlantımızı açıyoruz:
Yeniden SqlDataReader ve HasRows property'sini ve while döngüsünü kuruyoruz:
Management Studio ile sorgumuzu çalıştırdığımızda bize 3 satır ve tek kolondan oluşan bir sonuç döndürmüştü,doğal olarak while döngüsü de 3 kez dönecek ve her dönüşünde satırları sırasıyla vereceği için gelen her satırı += operandıyla değişkenimize ekliyoruz:
Finally bloğu içerisinde bağlantımızı kapatıyor ve sonucu ekrana yansıtıyoruz:
Tüm kodlarımızı tek bakış açısıyla görelim:
Sanırım Ado.Net ile select sorgusunun ne kadar kolay olduğunu yeniden görmüş olmalısınız,bir sonraki makalemizde ise birden çok satır ve birden çok kolonla çalışmayı öğreneceğiz.O yüzden tekrar görüşmek dileğiyle hoşçakalın esen kalın. :)
Bir önceki Ado.Net makalemizde Ado.Net'in ne olduğu,nasıl bir yapıysa sahip olduğu ve mimarilerini teorik halinde görmüştük.Bu makalemizde ise ilk örnek Ado.Net uygulamamızı gerçekleştireceğiz.
Veritabanı sunucusu olarak Microsoft SQL Server 2008 R2 kullanacağız ve örnek veritabanımız ise daha önce bahsettiğim BakkalDB'yi kullanacağız.BakkalDB veritabanımızın script dosyasını buradan indirebilirsiniz...
Ado.Net konusunda ilk öğreneceğimiz konu Select sorgusu olacak,örneklerimize kolaydan karmaşığa doğru devam edeceğiz.
Öncelikle SQL Server'ı açıyoruz ve sisteme giriş yapıyoruz,örneklere başlamadan önce Ado.Net için hat safhada önemli olan SQL Connection String (bağlantı cümleciğini) oluşturmamız gerekiyor.
SQL Connection String'i bir önceki makalemizden hatırlarsak Ado.Net'in veritabanı sunucusu arasında iletişim kurduğu bağlantı bilgilerini içerir demiştik ve birden fazla bağlantı cümleciği olduğu için en uygununu bulmak zorundayız.
SQL Connection String'in yapısı şu şekildedir:
Server=
Server deyimi için eğer bilgisayarınızda kurulu bir SQL Server'ın herhangi bir sürümü varsa ve eğer full sürüm kullanıyorsanız nokta (.) işareti veya "localhost" ya da bilgisayarınızın ad değerini verebilir ya da SQL Express kullanıyorsanız
.\SQLExpress (nokta\SQLExpress)
ya da
localhost\SQLExpress
ya da
bilgisayaradi\SQLExpress
değerini verebilirsiniz.
Kullanacağınız veritabanı sunucusunu hosting gibi uzak bir sunucuda yer alıyorsa o sunucunun IP adresinizi
yazmanız yeterlidir.
Çok önemli bir konu olan SQL Server Connection String için bilgisayarınızda ya da başka bir sunucuda veritabanınız
yoksa bu makaleyi inceleyerek bilgisayarınıza SQL Server kurmanız gerekmektedir.
Makalemize devam edersek; BakkalDB veritabanımızı kendi SQL sunucumuza taşıdıktan sonra DataBase deyimi karşılığına BakkalDB yazmanız yeterli olacaktır.
UID ve PWD değerlerine ise SQL Server'ı açtığınızda karşınıza gelen kullanıcı adı ve şifrenizi yazmanı yeterlidir,eğer
herhangi bir kullanıcı adı ya da şifre belirlemeden login oluyorsanız bu Windows Authatication (Windows Yetkisi ile Oturum Açma) yapıyorsunuz demektir ki bunu da tavsiye etmem! Windows Authatication ile oturum açma işlemi uyguluyorsanız aşağıdaki şekilde bir Connection String kullanacaksınız:
Data Source=localhost\SQLSERVER;Initial Catalog=
SQL Connection String ile ilgili net bir sonuca ulaştığımızı varsayarsak şimdi SQL Server Management Studio'dan New Query penceresinden Select GetDate() sorgumuzu çalıştıralım:
GetDate() metodu bize SQL Server'ın içinde bulunduğu sunucunun (veya kendi localhostumuzun) tarih ve saatini verir,bu sorgudan dönen sonucu C# ve Ado.Net ile kullanarak programımızda göstereceğiz.
Şimdi Visual Studio'yu açıyor ve yeni bir Windows Form uygulaması oluşturuyoruz:
Oluşturduğumuz forma ToolBox penceresinden bir buton sürükleyip bıraktıktan sonra aşağıdaki bir tasarım görüntüsü elde ediyoruz:
Burada yapmak istediğimiz; butona tıkladığımızda Ado.Net arka planda veritabanı sunucusunun GetDate() metodu ile vereceği tarihi Label kontrolüne yazdırmak olacak, o yüzden butonumuza çift tıklayarak kod yazmaya başlıyoruz.
Konuya başlamadan önce string bir değişken belirliyoruz, bu değişken değerini Ado.Net ile çalıştıracağımız sorgu sonucunda değer kazanacak..
Ado.Net'in yapısı itibariyle ilk önce yapacağımız bir bağlantı köprüsü kurmak olacak,bu köprü SQL Connection Stringi kullanarak veritabanı sunucumuz ile iletişime geçecek:
SqlConnection olarak ifade edilen köprümüzü kurduktan sonra sıra geldi sorgumuzu çalıştırma konusunda, bu defa SQL sorgumuzu koprünün üzerinden karşıya geçiriyoruz:
Elbette bu işlem için yalnızca bağlantının varolması yetmiyor,ayrıca bağlantının açık olması gerekmektedir.O yüzden SqlConnection sınıfının Open() metodunu kullanarak SqlConnection String'de yer alan bağlantı bilgilerini çalıştıyoruz:
Açılan bağlantı ile SQL sunucusundan gelen satırları SqlDataReader nesnesine yüklüyoruz, bu nesne tüm sonuçları kendisinde barındıracak:
SQL sunucu bağlantımızı açtıktan sonra geldik Connected mimarinin sorgu sonucu okuma tekniğine...Ado.Net ile select sorgusu çalıştırıldıktan sonra tıpkı veritabanında sorgulama yaptığımız gibi bir tabloyla karşılaşırız ve sorgu sonucu tek bir satır olabildiği gibi sorgunun tipine ve tablonun içindeki veri sayısına göre yüz binlerce dahi olabilir ya da sorgu sonucunda hiçbir sonuç gelmeyebilir de, biz yazılımcılar olarak programın doğru çalışabilmesi için mümkün olabildiğince proaktif (önceden önlem alarak davranmak) davranmak zorundayız.
Dolayısıyla SqlConnection sınıfının HasRows (satır varsa) property'sini kullanacağız:
Ardından sorgu sonucunda birşeyler geliyorsa Read() metodu ile sırasıyla her satırı denetleyeceğiz,bunun için bir döngü kullanmamız gerekiyor ve while döngüsü bu iş için biçilmiş kaftan diyebiliriz. :)
ve gelen sorgu sonucunu konunun başında belirlediğimiz string değişkenimize atıyoruz.
While döngüsü ile veritabanından gelen sonucu çektikten sonra artık açık tuttuğumuz bağlantımızı Close() metodu ile kapatıyoruz:
Buraya kadar Ado.Net ile tüm işlemlerimizi gerçekleştirdik ve değişkenimize değer kattıktan sonra MessageBox.Show() metodu ile sonucu ekrana yansıtalım:
Projemizi çalıştırıyoruz ve butona tıklıyoruz:
Gördüğünüz gibi oldukça kolay bir kullanım söz konusu,elbette ilk kez Ado.Net öğreniyorsanız bu size biraz zor gelebilir ancak zamanla kavrayabileceğiniz bir konu olduğunu anlayacaksınız.Tabi ki bol pratik yaparsanız!
Sıra geldi Ado.Net kullanımı ile ilgili önemli bir noktaya..
Ado.Net yapısı gereği sunucu iletişimi kurarak işlemler gerçekleştirirken oldukça hataya açık bir şekilde çalışmaktadır,dolayısıyla Ado.Net kullanımı ile ilgili try-catch-finally hata denetim sistemini sürekli kullanmamız gerekmektedir aksi halde sorgularımızı Ado.Net ile çalıştırmak istediğimiz halde neden çalışmadığını anlayabilme konusunda gereksiz yere zamanımızı harcamak zorunda kalırız.
Try-Catch-Finally kullanarak Ado.Net kodlarımızı aşağıdaki şekilde yeniden düzenliyoruz:
Klasik biçimde yazdığımız kodlara bakarsak SqlConnection nesnemizi try bloğu üzerine taşıdık,bunun nedeni SqlConnection sınıfına ait bağlantı açma ve kapama işlemlerini try-catch yapısının farklı bloklarımızı kullanmamızdan kaynaklanmaktadır.Bu şekilde bir kullanım ile projelerimize doğru bir şekilde yön vermiş oluruz ve mümkünse her sorgu başına sık sık kullanmanızı öneririm zira try-catch hata yakalama sistemi kullanılmayan Ado.Net işlemlerinda ortaya çıkabilecek problemler saçınızı başınızı yolduracak niteliklerde olabilir. :)
Şimdi ise konumuzu biraz daha zorlaştırarak tablolar ile çalışma konusuna geliyoruz, formumuza yeni bir buton daha ekliyoruz ve BakkalDB veritabanımızdaki ilk 3 müşterinin isimlerini getireceğiz...
Öncelikle SQL Server Management Studio ile sorgumuzu çalıştıralım ve sonucu görelim:
Yeniden Visual Studio'ya dönüyor, butonumuza çift tıklayarak click eventine geçiyoruz ve müşteri listesini tutacağımız boş bir string tipte değişken tanımlıyoruz:
Ardından bir SqlConnection nesnesi oluşturuyoruz ve try-catch-finally bloklarımızı kuruyoruz:
SqlCommand ile sorgumuzu hazırlıyoruz ve bağlantımızı açıyoruz:
Yeniden SqlDataReader ve HasRows property'sini ve while döngüsünü kuruyoruz:
Management Studio ile sorgumuzu çalıştırdığımızda bize 3 satır ve tek kolondan oluşan bir sonuç döndürmüştü,doğal olarak while döngüsü de 3 kez dönecek ve her dönüşünde satırları sırasıyla vereceği için gelen her satırı += operandıyla değişkenimize ekliyoruz:
Finally bloğu içerisinde bağlantımızı kapatıyor ve sonucu ekrana yansıtıyoruz:
Tüm kodlarımızı tek bakış açısıyla görelim:
Sanırım Ado.Net ile select sorgusunun ne kadar kolay olduğunu yeniden görmüş olmalısınız,bir sonraki makalemizde ise birden çok satır ve birden çok kolonla çalışmayı öğreneceğiz.O yüzden tekrar görüşmek dileğiyle hoşçakalın esen kalın. :)
Başarılı