Merhabalar bu makalemde sizlere SQL Server ortamında kullanılan Stored Procedure yardımıyla C# içerisinde veri tabanı işleminin nasıl yapılacağını anlatacağım. Öncelikle SQL Server Management ortamına aşina olmanız için temel bazı işlemleri de bu yazıda sizlere anlatacağım.
Nedir bu Stored Procedure? Bunu açıklamamız için öncelikle veri tabanı yönetim sisteminden bahsedelim.
Veri Tabanı Yönetim Sistemi Nedir? (Database Managament Systems-DBMS)
SQL Server bir veri tabanı yönetim sistemidir. Veri tabanı yönetim sistemleri içerisinde veri tabanı işlemleri ile ilgili yönetim işlemlerini tüm yönleriyle yapabileceğiniz sistemlerdir. Bu sistemlerde veri tabanı oluşturma, temel veri tabanı işlemlerinin yanında veri tabanı programlama, güvenliğini sağlama, kullanıcı yetkilendirmesi gibi işlemleri yapabilirsiniz. Bilgisayarınızda SQL Server yüklü olsa bile yönetim işlemlerini yapmanız için hangi sürümü kullanıyorsanız sürüme ait Management Studio yazılımını da indirmeniz gerekir. Örneğin ben SQL Server Managament Studio 2012 kullanmaktayım.
SQL Server Management Studio Ortamında Temel İşlemler
Öncelikle bir Database oluşturalım;
Resim-1
Database üzerinde sağ tıklayıp New Database seçeneği ile Database oluşturalım.
Resim-2
Database adımızı deneme olarak belirleyelim. Sihirbaz yardımıyla Database oluşturma bu şekilde yapılmaktadır. Bunu kod ile de oluşturabiliriz.
Resim-3
New Query seçeneğini tıkladığımızda kod yazacağımız penceremiz açılıyor ve buraya kodlarımızı yazalım.
Resim-4
“Create Database deneme” kodumuzu yazdıktan sonra “Execute” butonunu tıklayarak komutu çalıştıralım ve alt kısımda komutun çalıştığına dair uyarımız çıkıyor. Şu anda Object Explorer penceresinde deneme isimli Database görünmüyor Refresh butonunu tıkladığımız zaman Database sekmesinde oluşturmuş olduğumuz Database görünecektir.
Resim-5
Database üzerinde çift tıklıyoruz veya yandaki + işaretini tıklayıp da bu kısma geçelim. Tables üzerinde sağ tıklayıp New Table seçeneğini seçelim.
Resim-6
Tablomuzda temel olarak üç alan bulunacak bunlar ID, Adi ve Soyadi alanları ve bunların karşılarında Data Type kısmında alacakları değişken türünü belirleyelim. ID kısmı için Int değerini verelim sayısal bir değişkendir ve alt tarafta Identity Specification özelliğini “Yes” olarak değiştirelim bunun sebebi sayısal olan değerin otomatik olarak artmasını istememizdir. Alanın benzersiz olarak tek değer almasını istiyorsak yani veri tabanına eklediğimiz kayıt sadece bir kere eklensin ve benzersiz olsun istiyorsak;
Resim-7
ID kolonu üzerinde sağ tıklayıp Set Primary Key özelliğini seçmemiz gerekir. Adi ve Soyadi alanlarına verdiğim Varchar(50) değeri ise en fazla 50 karakter içeren metinsel veri alabileceği anlamına gelmektedir.
Tablomuzu kayıt etmek için ;
Resim-8
Save Table seçeneğini tıklıyoruz karşımıza gelen ekranda tablo adımızı yazalım.
Resim-9
Tablo adımızı Bilgiler olarak belirledim ve kayıt işlemini gerçekleştirelim. Şu anda deneme isimli bir Database ve içerisinde Bilgiler adında bir tablo oluşturduk. Tablomuza birkaç kayıt ekleyelim.
Resim-10
Kayıt eklemek için Tables sekmesine tıklayalım ve tablomuz üzerinde sağ tıklayıp Edit Top 200 Rows seçeneğini tıklayalım.
Resim-11
Böylece kayıtları eklemiş olduk. Bu örnekte yer alan kayıtlar Mshowto.org kadrosudur telif hakkı vardır J
Stored Procedure Yazımı
Artık stored procedure yazımına geçelim. Stored procedure;
Resim-12
Programmability kısmının altında yer almaktadır. Prosedürler bu kısımda depolanır ve kullanılırlar.
Resim-13
Stored Procedure üzerinde sağ tıklayarak New Stored Procedure seçeneği ile prosedür oluşturabiliriz. Ancak bunu kod ile oluşturalım bu örnekte bunu tercih etmemin sebebi ise sizlere SQL veri tabanı yönetim sistemine biraz aşina olmanızdır. Nitekim yukarıda anlattığım kısımlarla da sizlere biraz da olsa SQL Server Managament Studio ortamını tanıtmayı amaçladım. Table oluştururken kullandığımız New Query seçeneğini tıklayalım.
Resim-14
Normal şartlarda veri tabanımız seçili değilken New Query seçeneğini tıklarsak görmüş olduğunuz açılan pencerede yer alan Database isimleri üzerinde işlem yapılır ve hata alırsınız. Çünkü işlem yapacağımız Database ismi ve tablo adı bizim belirttiğimiz tablo ismi olmakta eğer buradan Database adımızı seçmezsek örneğin görünen Database ismi Master olsun bunu kod tarafında hangi Database’i kullanacağımızı belirleyeceğiz.
Resim-15
Gördüğünüz üzere burada deneme isimli veri tabanımız seçili değil SQL Serverın hangi veri tabanını kullanacağını “use deneme” kodumuzda belirtiyoruz. Daha sonra yer alan “go” ifadesi ise üstteki kodun bittiğini ve alt satırdaki kodlara geçmemizi sağlayan bir işarettir. “create proc BILGILERIGETIR “diyerek belirtmiş olduğumuz isimde bir prosedür oluşturuyoruz. “as-begin-end” kolonları arasına da prosedürün yapacağı işi yazalım. Prosedürümüz burada Adi ve Soyadi kolonlarındaki bilgileri bize getiren bir SQL ifadesi içermektedir. Bu prosedürün çalışması için Execute seçeneğini tıklayalım.
Resim-16
İşlemin başarılı olduğuna dair mesajımız belirtildi ve bu prosedür BILGILERIGETIR ismi ile yukarıda gösterdiğim Programmability kısmında Stored Procedure alt dizininde yer almaktadır. Şimdi C# tarafına geçelim ve bu prosedürü nasıl kullanacağımıza bakalım.
C# Stored Procedure Kullanımı
Visual Studio ortamını açıyoruz. Kullandığım sürüm VS 2012 Ultimate sürümüdür.
Resim-17
File>New>Project yolunu kullanarak projemizi oluşturalım.
Resim-18
Projemize StoredProcedure adını veriyoruz. Template kısmından C# ve Windows Form Application seçeneğini seçelim.
Resim-19
Forma verileri görüntülemek için ToolBox dan DataGridView ve Button ekliyoruz. Butonun Text özelliğini “Bilgileri Getir” olarak değiştirelim. Butona çift tıklayıp Click olayına kodlarımızı yazalım. Bu örnekte Disconnected bağlantı kullanacağız.
Resim-20
Öncelikle veri tabanı işlemleri için gerekli olan System.Data ve System.Data.SQLClient Name spacelerini projemize ekleyelim.
Resim-21
Veri tabanı yolumuzun bağlantı nesnesi olan SQLConnection nesnemizi tanımlayalım. DataSource kısmına Localde çalıştığımız için”.” Veya “127.0.0.1” veya “localhost” yazabiliriz. Initial Catalog kısmına veri tabanı adımızı, Integrated Security kısmına ise “true” veya “sspi” yazabiliriz yazdığımız bu ifade SQL Serverda bulunan;
Resim-22
Authentication yani oturum açmaya yetkili olan kullanıcıların kimler olduğunu belirtir. Şu anda bizde Windows Authentication seçili, bunun anlamı bu bilgisayarda oturum açan herkesin SQL Server da oturum açmaya yetkili olduğunu belirtir. Kodlarımızı yazmaya devam edelim.
Resim-23
SQLCommand nesnesi veri tabanı üzerinde hangi işlem yapılacağını belirten nesnedir. Normalde Command nesnesi burada veri tabanından bilgi çekeceğimiz için açıklama satırına aldığım(yeşil yazılı) kısımda olduğu gibi yazılmalıydı fakat biz burada Stored Procedure kullanacağımız için, SQL Serverda yazdığımız Stored Procedure ismini yazdık ve hangi bağlantıyı kullanacağımızı belirttik. Command nesnesinin varsayılan yapısı String yani Text yapısıdır ancak burada Stored Procedure kullandığımızdan CommandType özelliğini de Stored Procedure olarak değiştirelim.
Resim-24
SQLDataAdapter nesnesi bizden Select yani veriyi çekmek için kullandığımız sorgu cümlesini istemektedir. Sorgu cümlemiz “cmd” olarak tanımladığımız SQLCommand nesnesi içerisinde yer aldığı için DataAdapter sınıfını kurarken buraya cmd yazdık.
DataSet ise içerisinde tablolar barındıran ve veri tabanında bulunan tablo yapısını birebir modelleyen bir yapıdır. Biz verilerimizi burada modelleyeceğiz. DataSet tanımladık ve DataAdapter’ın Fill metodu ile DataSet’i doldurduk. Hemen yanında belirttiğimiz “Bilgi” ise DataSet içerisinde yer alacak olan tablonun ismidir. Yanı veri tabanından çekmiş olduğumuz bilgiler burada DataSet içerisindeki “Bilgi” isimli tabloda depolanacaktır.
Formumuza eklemiş olduğumuz DataGridView nesnesinin DataSource yani veri kaynağı özelliğine DataSet içerisinde bulunan tablomuzu bağlıyoruz. Burada ds.Tables[0] yazmamızın sebebi DataSet içerisinde bir tablo bulunması ve bu tablonun ilk olmasıdır.
Uygulamamızı F5 tuşuna basarak çalıştıralım ve butona tıklayalım.
Resim-25
Veri tabanımıza girmiş olduğumuz bilgileri Stored Procedure kullanarak C# ortamında görüntülemiş olduk. Bir sonraki yazıda görüşmek dileğiyle iyi çalışmalar dilerim.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar