menüsünden Connect to Database komutunu verir veya Server Explorer penceresinde Data Connections’a ait kısayol menüsünden Add Connection komutunu verirseniz ekrana aşağıda verilen Add Connection diyalog kutusu gelir.

Bu diyalog kutusunda ilk olarak Server Name liste kutusunda kendisi için Connection hazırlanmak istenen veritabanını kontrol eden SQL Server yani Intance seçilir. Bağlanmak istediğim “video_clup” adlı veritabanı SERVER adlı bilgisayardaki SQL Server tarafından kontrol edildiği için bunu seçtim.
Server veya Intance seçiminden sonra kendisi için bağlantı tanımlanmak istenen veritabanın nasıl korunduğu konusunda seçim yapılır. Veritabanını hazırlarken kimlik doğrulama işleminin SQL Server tarafından yapılmasını tercih ettiğim için Use SQL Server Authentication radyo düğmesini seçtim. Ardından kullanıcının adını ve parolasını girdim.
Kendisi için bağlantı hazırlanmak istenen dosyanın nasıl korunduğunu belirttikten sonra Select or enter a database name liste kutusunu açıp bağlantı ile erişim sağlamak istediğim veritabanını seçtim. Dosya seçiminden sonra Text Connection düğmesini tıklayıp bağlantıda herhangi bir sorunun olup olmadığını öğrenebilirsiniz.
Kimlik doğrulama işlemi Windows tarafından yapılıyor olsaydı Add Connection diyalog kutusunda yapılan işlemlerin üzerinde fazla durmaya gerek olmazdı. Kimlik doğrulama tekniği olarak Use Windows Authention’ı seçmiş olsaydım SQL Server tarafından korunan veritabanları Select or enter a database name kutusunda listelenmezdi. Ayrıca yanlış kullanıcı adı veya parola girilirse veritabanları listelenmez.
SQL Server Veritabanları Üzerinde İşlem Yapmak
Visual Basic uygulamaları dahilinde SQL Server veritabanları üzerinde işlem yaparken ilk başvurulması gereken kontrol SqlConnection kontrolüdür. SQL Server veritabanları üzerinde işlem yapılırken yararlanılan SqlConnection, SqlDataAdapter ve SqlCommand gibi kontroller başlangıçta Toolbox’ta listelenmediği için Toolbox’a ait kısayol menüsünden komut verip Choose Toolbox Items diyalog kutusunu ekrana getirmek gerekiyor.

Bu diyalog kutusunda Sql ön adlı bu bileşenler seçilip OK düğmesi tıklanınca SQL Server veritabanları üzerinde işlem yaparken gerek duyulan kontroller Visual Studio’nun Toolbox adlı penceresinde yer almaya başlar. Forma SqlConnection nesnesi yerleştirmek istediğim için Toolbox’ta SqlConnection kontrolünü temsil eden düğmeyi seçtim.

Üzerinde işlem yapmak istediğim veritabanı Access veritabanı olsaydı veritabanına bağlanırken OleDbConnection kontrolünden yararlanırdım. SqlConnection kontrolünü temsil eden düğmeyi seçip formu tıklayınca aşağıdaki gibi bir sonuç elde ettim. SqlConnection kontrolü çalışma anında formun üzerinde görüntülenmediği için formun alt kısmına konulmaktadır.

SqlConnectionnesnesinin özelliklerini Properties penceresinde görebilirsiniz. Ancak bu özelliklerden veritabanına bağlanmayla ilgili olanlardan bir tek ConnectionString özelliği değiştirilmeye uygundur. Bu özelliğe ait liste kutusunda, Server Explorer penceresinde daha önce SQL Server veritabanları için tanımlanan bağlantılar ve New Connection adında bir seçenek bulunmaktadır. Bu özelliğe Server Explorer penceresinde tanımlanan mevcut bağlantılardan birisinin adını aktarmak demek, o bağlantının metnini ConnectionString özelliğine aktarmak demektir.

SqlConnection nesnesi için yeni bir bağlantı tanımlamak veya Server Explorer penceresinde listelenecek Connection hazırlamak istiyorsanız New Connection seçeneğini tıklayarak Add Connection diyalog kutusunu ekrana getirebilirsiniz. Bu SqlConnection nesnesinin yukarıdaki sayfalarda hazırladığım bağlantıyı kullanmasını istediğim için ConnectionString özelliğine bu bağlantıya ait metni aktardım.
SqlDataAdapter Kontrolü
Server Explorer penceresinden yararlanarak hazırladığım bağlantının adını Properties penceresinde SqlConnection nesnesinin ConnectionString özelliğine aktardıktan sonra forma SqlDataAdapter yerleştirdim. Çünkü SqlConnection nesnesi ile erişim sağlanan veritabanındaki bilgileri kullanabilmek için SqlDataAdapter nesnesine gerek vardır. Bu nedenle Toolbox’ta SqlDataAdapter kontrolünü temsil eden düğmeyi seçtim.

Toolbox’tan yararlanıp forma SqlDataAdapter nesnesi yerleştirseniz SqlDataAdapter’in özelliklerini ayarlarken size yardımcı olacak Data Adapter Configuration Wizard kendiliğinden çalışmaya başlar ve ilk olarak bağlantı seçimi yapılan Choose Your Data Connection diyalog kutusu ekrana gelir. Bu arada 2004 yılında yayınlanan ilk C# kitabımda Data Adapter Configuration Wizard’ın sırayla ekrana getirdiği diyalog kutularına yer verdim diye yargılandığımı taktirlerinize sunmak istiyorum. Yani Wizard'a uyarak kabahat(!) işlemiş oldum.
Bu diyalog kutusunda SQL Server veritabanları için Server Explorer penceresinde tanımlanmış mevcut Connection nesneleri listelenmektedir. Bu ekran görüntüsünü aldığım sırada SQL Server veritabanları için hazırlanmış yalnızca bir Connection mevcuttu. Ekranda bu diyalog kutusu varken New Connection düğmesini tıklayıp Server Explorer penceresi ile ilgili Add Connection diyalog kutusunu ekrana getirip yeni bir bağlantı tanımlayabilirsiniz.
Bu SqlDataAdapter nesnesi ile ilgili veritabanı üzerinde işlem yaparken Server Explorer penceresinde tanımlamış olduğum mevcut bağlantıyı kullanmak istediğim için bu bağlantıyı seçip Next düğmesini tıklayıp aşağıda verilen Choose a Command Type diyalog kutusunun ekrana gelmesini sağladım.

Bu SqlDataAdapter nesnesi ile SQL Server veritabanı üzerinde işlem yaparken SQL dilinin SELECT, UPDATE, INSERT ve DELETE deyimlerini kullanarak işlem yapmak istediğim için Use SQL statements radyo düğmesini seçip Next düğmesini tekrar tıklayıp SQL kodu yazılan Generate the SQL statements diyalog kutusunu ekrana getirdim.

Bu diyalog kutusunda söz konusu SqlConnection nesnesiyle erişim sağlanan SQL Server veritabanındaki tablo ve tablonun alanlarını seçmek üzere SQL kodu yazılır. SQL kodunu kendiniz yazmak istemiyorsanız Query Builder düğmesini tıklayıp Query Builder’ı çalıştırabilirsiniz.
SQL kodu hazırlamak üzere Query Builder penceresi ekrana getirildiğinde söz konusu bağlantı ile erişim sağlanan veritabanındaki tablo, View ve fonksiyonların listelendiği Add Table diyalog kutusu ekrana gelmektedir.

Bu ekran görüntüsünü aldığım sırada söz konusu SqlConnection nesnesi ile erişim sağladığım SQL Server veritabanında “filmler” adında bir tek tablo vardı. Hangi tablo ile ilgileniyorsanız veya hangi tablo için SQL kodu yazmak istiyorsanız Add Table diyalog kutusunda o tabloyu seçip Add düğmesini tıklayıp tabloyu sorguya dahil etmelisiniz.
Sorguya dahil edilen tablonun alanları Query Builder penceresinin üst kısmında listelenir. Aşağıda verilen ekran görüntüsünü “filmler” tablosunu sorguya dahil edip Add Table diyalog kutusunu kapattıktan sonra aldım.
Bu diyalog kutusunda SqlDataAdapter nesnesi ile SQL Server veritabanı üzerinde işlem yaparken kullanılacak SQL kodu hazırlanmaktadır. Söz konusu tablonun hangi alanları ile ilgileniyorsanız o alanları seçmeli veya alanların adlarını SQL koduna kendiniz yazmalısınız.
Bu SQL kodu ile “filmler” tablosundaki bütün kayıtlar bütün alanları ile SqlDataAdapter nesnesinin istifadesine sunulur. Tablodaki bütün kayıtlar ile ilgilenmiyor veya bazı kayıtları filtre etmek istiyorsanız SQL koduna WHERE deyimini ekleyebilirsiniz. Bu sırada OK düğmesini tıklayıp Query Builder’ın çalışmasını sona erdirip Generate the SQL statements diyalog kutusuna döndüm.

Bu sırada Query Builder tarafından hazırlanan SQL kodunda değişiklik yapabilirsiniz. SqlDataAdapter nesnesinin özelliklerini Wizard ile belirleme işlemine devam etmek üzere Next düğmesini tekrar tıklayınca Wizard Results diyalog kutusu ekrana geldi.

Wizard bu diyalog kutusunda kayıt değiştirmek ve silmek için gerekli SQL kodlarını hazırlayamadığını rapor ederse söz konusu tablo için birincil indeks hazırlamamış olabilirsiniz.
Data Adapter Wizard ilgili tablodaki mevcut kayıtları görüntülemek, yeni kayıt girmek, kayıt silmek ve yapılan değişiklikleri veritabanına yansıtmak için gereken kodları otomatik olarak hazırlamaktadır. Hazırlanan bu SQL kodları SqlDataAdapter nesnesinin SelectCommand, InsertCommand, UpdateCommand ve DeleteCommand özelliklerinde saklanan Command nesnelerine aktarılmaktadır.
SqlDataAdapter nesnesi çalışma anında görüntülenmediği için formun alt kısmındaki panele yerleştirilir. SqlDataAdapter seçili iken Properties penceresinin alt kısmında Configure Data Adapter, Generate Dataset ve Preview Data linkleri bulunmaktadır.

Data Adapter Configuration Wizard ile hazırlamış olduğunuz ile SqlDataAdapter nesnesinin özelliklerinde değişiklik yapacaksanız Configure Data Adapter linkini tıklayarak Data Adapter Configuration Wizard’ı tekrar çalıştırabilirsiniz.
SqlDataAdapter nesnesi ile erişim sağladığınız tablodaki bilgileri görmek veya tablonun içeriği hakkında bilgi edinmek istiyorsanız Preview Data linkini tıklamalısınız. Bu linki tıkladığınızda aşağıda verilen Data Adapter Preview diyalog kutusu ekrana gelir.

Bu diyalog kutusunda SqlDataAdapter nesnesi ile erişim sağlanan tablonun içeriğini listeleyebilmek için ilk olarak Select an object to preview başlıklı kutuda SqlDataAdapter seçimi yapılmalıdır. DataAdapter seçiminden sonra Preview düğmesi tıklanırsa tablonun içeriği Results başlıklı kutuda listelenir.

Query Builderpenceresinde SqlDataAdapter için SQL kodunu yazarken WHERE deyimi ile kayıtların bazılarını filtre etmişseniz Result kutusunda tablodaki bütün kayıtların yerine SELECT deyimi ile çekilen kayıtlar listelenir.
DataSet Hazırlamak
Formların üzerinde tabloların içeriğini görüntülemek için SqlConnection ve SqlDataAdapter’den başka Dataset nesnesine gerek vardır. SQL kodu yazmayı seviyorsanız DataSet kullanmadan profesyonel programlar geliştirebilirsiniz. DataSet kullanıldığı zaman bazı işlemler pratik olmaktadır.
Dataset nesnesini Toolbox’tan yararlanarak forma yerleştirmek yerine SqlDataAdapter nesnesi seçili iken Properties penceresinin alt kısmına yerleştirilen Generate Dataset linkini tıklayıp hazırlayabilirsiniz. Forma yerleştirilmiş DataAdapter nesnesine bağımlı olarak hazırlanan Dataset’in özellikleri ister istemez DataAdapter ile veritabanından çekilen verilerin yapısına göre ayarlanır. Properties penceresinde Generate Dataset linkini tıklarsanız ekrana aşağıda verilen Generate Dataset diyalog kutusu gelir.

Projedeki mevcut Dataset’lerden birisini kullanmak istiyorsanız Existing radyo düğmesini seçtikten sonra Dataset seçimini yapmalısınız. Bu ekran görüntüsünü aldığım sırada üzerinde çalıştığım projede herhangi bir Dataset olmadığı için New radyo düğmesini seçtim. Yeni bir Dataset hazırlamak üzere New düğmesi seçildikten sonra Dataset’e verilmek istenen ad yazılır.
Bu diyalog kutusuna yazılan ad DataSet’in DataSetName özelliğine aktarılmaktadır. Dataset üzerinde işlem yapılırken bu özelliğin içeriği kullanıldığı için Dataset’e New başlıklı kutuya yazılan addan farklı bir ad verilmektedir. New başlıklı kutuya “DataSet1” yazılması halinde Visual Studio bu dataset’e “dataSet11” adını vermektedir. Başka bir deyişle yazılan adın sonuna “1” eklenmekte ve adının ilk harfi küçük olarak seçilmektedir.
Generate Datasetdiyalog kutusunun orta kısmında ise projedeki mevcut SqlDataAdapter nesneleri listelenmektedir. Bu ekran görüntüsünü aldığım sırada üzerinde çalıştığım projede bir SqlDataAdapter vardı. Hangi SqlDataAdapter nesnesi için Dataset hazırlamak istiyorsanız o SqlDataAdapter nesnesini seçmelisiniz. Bu ayarlamalardan sonra OK düğmesini tıklarsanız Dataset hazırlanır ve formun alt kısmındaki panele yerleştirilir.

Generated Datasetdiyalog kutusundan yararlanarak hazırlanan her Dataset için birisi XSD uzantılı olmak üzere 4 dosya hazırlandığı için projedeki Dataset nesnelerini görmek için Solution Explorer penceresine bakabilirsiniz. Forma yerleştirdiğiniz DataSet’i silme gereğini duyduğunuzda bu 4 dosyayı da silmeniz gerekir.

Connection nesnesi ile bağlanılan veritabanındaki bilgileri SqlDataAdapter’den yararlanarak Dataset’e aktarabilmek için kod yazmak gerekmektedir. Bu amaçla forma bir düğme yerleştirdim ve düğmenin Click olayını temsil eden metoda aşağıda verdiğim satırı yazdım.
Burada kullanılan Fill() metodunun aşırı yüklenmiş çok sayıda sürümü olmakla birlikte burada kullanılan şekli 2 parametreye sahiptir. İlk parametrede bilgilerin aktarılacağı Dataset, 2. parametrede ise bilgilerin aktarılacağı DataTable işaret edilmektedir. Burada 2. parametre olarak string bilgi DataTable nesnesinin TableName özelliğine aktarılır.
Private Sub Aktar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Aktar.Click
SqlDataAdapter1.Fill(DataSet11, "filmler")
End Sub
Bu kodu yorumlamak gerekirse şunlar söylenebilir. Wizard tarafından yapılan seçimlere bağlı olarak SqlDataAdapter nesnesinin SelectCommand özelliğine aktarılan ve SELECT deyimini içeren SQL kodu işletilerek veriler veritabanından çekilmektedir. Çekilen verileri aktarmak üzere DataSet’te TableName özelliği “filmler” olan bir DataTable nesnesi hazırlanmaktadır.
Tekrarlamak gerekirse bu şekilde kullanılan Fill() metodu sayesinde veritabanından çekilecek veriler Dataset’te “filmler” adında bir DataTable’a aktarılır. DataTable’a verilerini çektiğiniz tablonun adından farklı bir ad verebilirsiniz. Bu nedenle Fill() metodu aşağıdaki gibi kullanıldığında DataTable nesnesinin TableName özelliğine “sinema” bilgisi aktarılır.
Private Sub Aktar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Aktar.Click
SqlDataAdapter1.Fill(DataSet11, "sinema")
End Sub
Yukarıda belirtildiği gibi Data Adapter Configuration Wizard ilgili tablo üzerinde işlem yapmak için gereken SQL kodlarını hazırlayıp DataAdapter’ın SelectCommand, InsertCommand, UpdateCommand ve DeleteCommand özelliklerinde saklanan Command nesnelerinin CommandText özelliklerine aktarmaktadır. Başka bir deyişle DataAdapter nesnesinin içine 4 SqlCommand nesnesi gömülmektedir.
Örneğin SqlDataAdapter’in SelectCommand özelliğinde saklanan SqlCommand nesnesinin özelliklerini görmek istiyorsanız Properties penceresinde DataAdapter’in özellikleri listelenirken SelectCommand özelliğin adının önündeki artı(+) işaretini tıklamanız yeterlidir. Aşağıda verilen ekran görüntüsünü veritabanından bilgi çekilirken kullanılan ve adı DataAdapter’in SelectCommand özelliğine aktarılan Command nesnesinin özelliklerini listeledikten sonra aldım.

DataGridView Kontrolü
Yukarıda anlatılan şekilde Dataset nesnesi hazırlandıktan sonra SqlDataAdapter ile erişim sağlanıp içeriği Dataset’e aktarılan tablonun içeriği formun üzerinde görüntülenebilir. Dataset’e aktarılan bilgiler formun üzerinde görüntülenirken DataGridView, TextBox’lar, ListBox’lar veya ComboBox’lar kullanılabilinir.
Toolbox’ta DataGridView kontrolünü temsil eden düğmeyi seçip formu tıklarsanız forma DataGridView yerleştirmiş olursunuz. DataGridView’in boyutlarını içeriği görüntülenecek tablonun yapısına veya Query Builder penceresinde seçilen alanlara göre ayarlamak gerekir.

DataGridView nesnesi forma yerleştirildikten sonra bilgilerin hangi Dataset’ten alınacağı belirtilmelidir. Bu amaçla Properties penceresinde DataGridView’in özellikleri listelenirken DataSource özelliğine istenen Dataset’in adı aktarılır.

DataSet seçiminden sonra ayrıca DataMember özelliği ile DataTable seçmelisiniz. DataMember özelliği ile DataTable seçimini yapmazsanız içeriği görüntülenecek tabloyu çalışma anında seçebilirsiniz. DataMember özelliği ile DataTable seçerseniz DataGridView’in üzerinde tablonun alanları aşağıdaki gibi listelenir.

Bu hazırlıklardan sonra projeyi çalıştırıp formdaki düğmeyi tıklayıp SqlDataAdapter sayesinde tablonun içeriğini Dataset’e aktarırsanız aşağıdaki gibi bir sonuç elde edersiniz. Bu ekran görüntüsünü aldığım sırada “filmler” adını verdiğim tabloda 2 kayıt vardı.
DataGridView nesnesinin DataSource özelliği için DataSet seçme işlemini kod yazarak yapabilirsiniz. Aşağıda verilen satırlar sayesinde DataGridView nesnesinin DataSource ve DataMember özellikleri ayarlanmış olur. Bu arada 2004 yılından yayınlanan C# kitabımda forma yerleştirdiğim Button nesnesine “Aktar” adını verdiğim için saygıdeğer yerli bir programcılık kitabı yazarı tarafından suçlanıp yargılandığımı bilgilerinize sunmak isterim. Yani Button nesnelerine Aktar adını vermek tehlike arz ediyor.
Private Sub Aktar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Aktar.Click
SqlDataAdapter1.Fill(DataSet11, "filmler")
DataGridView1.DataSource = DataSet11;
DataGridView1.DataMember = "filmler";
End Sub
Bu ayarlamayı isterseniz aşağıdaki gibi yapabilirsiniz. Çünkü DataSet sınıfı DataTable’leri içeren Tables adında bir koleksiyonu sahiptir. Aşağıda verilen satır ile Tables koleksiyonun ilk elemanın içeriği DataGridView’de görüntülenir.
Private Sub Aktar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Aktar.Click
SqlDataAdapter1.Fill(DataSet11, "filmler")
DataGridView1.DataSource = DataSet11.Tables(0);
End Sub
Biraz Reklam
Visual Basic hakkında ayrıntılı bilgi edinmek istiyorsanız aşağıda resmini verdiğim C# 3.0 kitabıma bakabilirsiniz. En kapsamlı C# kitabı iddiası ile hazırlanan bu kitabı kitapçılardan, Seçkin Yayıncılıktan, HepsiBurada.com'dan veya Kitapyurdu.com'undan temin edebilirsiniz. Orada burada Memik Yanık ve bu kitap aleyhine yazılan bir şeyler görürseniz inanmayın ve kitabın nasıl bir içeriğe sahip olduğunu görmek istiyorsanız bu kitaptan alınma şu bölüme bakabilirsiniz.
