Makale Özeti

Günümüzde bilginin çok değerli olduğunu düşünürsek, bilginin depolanması konusuda daha çok değer kazanır. Veritabanlarıda yazılım çözümlerinin vazgeçilmez bir öğesidir. Veritabanı düzenli bir yapıda tutulan veri topluluğuna denir. Veritabanları ilişkisel veritabanı yönetim sistemleri (RDBMS Relational Database Management System) ile tutulur. Microsoft SQL Server’ da bir RDBMS’dir. Sql Server ile veritabanları oluşturulur ve yönetilir. SQL Server iki tür veritabanını yönetmek için kullanır....

Makale

ADO .Net de Bağlantı Nesnesi

 

Günümüzde bilginin çok değerli olduğunu düşünürsek, bilginin depolanması konusuda daha çok değer kazanır. Veritabanlarıda yazılım çözümlerinin vazgeçilmez bir öğesidir. Veritabanı düzenli bir yapıda tutulan veri topluluğuna denir. Veritabanları ilişkisel veritabanı yönetim sistemleri (RDBMS Relational Database Management System) ile tutulur. Microsoft SQL  Server’ da bir RDBMS’dir. Sql Server ile veritabanları oluşturulur ve yönetilir. SQL Server iki tür veritabanını yönetmek için kullanır. Bunlar OLTP (Online Transaction Processing) veritabanları ve OLAP (Online Analytical Processing) veritabanları. Bir OLTP veritabanı içinde veriler genellikle ilişkisel tablolar içinde organize edilir. Gereksiz veri yığınları azaltır ve veri güncelleme hızını arttırır. SQL Server çok sayıda kullanıcının gerçek zamanlı olarak veri analiz edebilmesini ve güncellemesini sağlar. OLAP teknolojisi büyük verilerin organize edilmesi ve incelenmesini sağlar. Örneğin bir analist büyük verileri hızlı ve gerçek zamanlı olarak değerlendirebilir. SQL Server toplu raporlama ve analizde, veri modelleme ve karar desteğe kadar geniş alanda çözümler sunar. Biz OLTP vertabanlarının bağlantı modeli üzerinde duracağız.

ADO’ da bağlantı nesnesi Connection iken ADO .NET’ te XxxConnection oldu. Burada veritabanı kaynaklarına erişim için artık OLE DB değilde her veritabanına özel bağlantı nesneler oluşturuldu. Veritabanı için özel nesnelerin olması ADO’ ya göre performansı arttırdı. Biz bunlardan SqlConnection’ı inceleyeceğiz. SqlConnection nesnesi Sql Serverda bulunan veri kaynaklarına bağlanmayı sağlar. Şimdi SqlConnection’ın üyelerini görelim.

SqlConnection

İlk olarak bir SqlConnection nesnesi örneği oluşturulur.

 

SqlConnection baglanti=new SqlConnection(baglanticumlesi);

 

ConnectionString

SqlConnection nesnesi örneği oluştururken içinde bağlantı cümlesi kullanılır. Bu bağlantı cümlesi SQL Server’ a bağlantı kurmak için gereken bilgileri bazı parametreler kullanarak tanımlar. Temel parametrelere aşağıda bakalım.

 

Connection Timeout or Connect Timeout

Server’a bağlantıda işlemi sonlandırmak için tutulan süre. Varsayılan olarak 15 saniyedir.

Initial Catalog

Veritabanının ismi.

Data Source

Bağlantı açıldığında kullanılan SQL Server’ın ismi.

Password

SQL Server’da tanımlanan kullanıcının şifresi.

User ID

SQL Server’da tanımlanan kullanıcının adı.

Integrated Security or Trusted Connection

Bağlantının güvenlibir bağlantı olup olmadığını tanımlar.True, False ve SSPI değerleri mümkündür. SSPI True’ya eşdeğerdir.

Persist Security Info

 

Varsayılanı False’dur. True güvenlik riskini arttırabilir.

 

Bağlantı cümlesi bağlantı kapalıyken ayarlanabilir. Bağlantı cümlesini yeniden uygulamak için bağlantı kapatılmalı ve tekrar açılmalı. Standart bir bağlantı cümlesi genelde aşağıdaki gibi olur.

 

String baglanticümlesi("workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind");

 

Bağlantı cümlesi oluşturmanın kolay yolu .NET’ te bir windows uygulaması açın ve Toolbox’daki Data tabından SqlConnection nesnesini forma sürükleyin. Ve nesnenin özellik penceresinde ConnectionString özelliğinde New Connection’ a tıklayın açılan pencereden istediğiniz sunucuyu, sunucu oturum açma bilgilerini, sunucudaki veritabanını seçerek tamam’a tıklayın böylece ConnectionString otomatik olarak ayarlanır.

 

SqlConnection Özellikleri

SqlConnection.Database Özelliği

 

Kullanılan database’in ismini veya bağlantı açıldıktan sonra kullanılan database’in ismini verir. Varsayılan değeri boş string’tir. Database özelliği dinamik olarak güncellenir. Eğer o anki database’i T-SQL veya ChangeDatabase methodu ile değiştirirseniz bir bilgi mesajı yollanır ve otomatik olarak güncellenir. Aşağıdaki uygulamada bunu görebiliriz.

 

String baglanticümlesi=” workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind”;

SqlConnection baglantim=new SqlConnection(bağlantıcumlesi);

baglantim.Open();

MessageBox.Show(“Database ismi: “+baglantim.Database);

baglantim.ChangeDatabase(“pubs”);

MessageBox.Show(“Database ismi: “+baglantim.Database);

baglanti.Close();

 

SqlConnection.DataSource Özelliği

 

Bağlı olan Sql Server’ın ismini verir. Aşağıdaki uygulama Sql Server’ın ismini alır.

 

String baglanticümlesi=” workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind”;

SqlConnection baglantim=new SqlConnection(bağlantıcumlesi);

baglantim.Open();

MessageBox.Show(“Server ismi: “+baglantim.DataSource);

baglanti.Close();

 

SqlConnection.PacketSize Özelliği

 

Sql Server ile iletişimde kullanılan ağ paketlerinin boyutunu alır. Varsayılan değeri 8192 byte’ tır. Eğer bir uygulama geniş kopyalama işlemleri veya  büyük boyutta yazı ve imaj bilgisi yollar ve alırsa PacketSize’ı varsayılandan büyük yapmak verimliliği arttırabilir. Çünkü ağ okuma, yazma işlemleri için daha az kullanılır. Eğer uygulamanız daha az miktarda bilgi alır ve yollarsa PacketSize’ı 512’i yapın. Çoğu uygulama için PacketSize varsayılan değeri en iyisi’dir. Aşağıdaki uygulamada PazketSize’ın kaç olduğu görülür.

 

String baglanticümlesi=” workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind”;

SqlConnection baglantim=new SqlConnection(bağlantıcumlesi);

baglantim.Open();

MessageBox.Show(“Server ismi: “+baglantim.PacketSize.ToString());

baglanti.Close();

 

SqlConnection.ServerVersion Özelliği

 

İstemcinin bağlı olduğu Sql Server’ın versiyonunu string olarak alır. Bu özellik geriye ##.##.#### formatta bir değer döndürür. Burada ilk iki basamaklı kısım baskın versiyon, sonraki iki basamaklı kısım zayıf versiyon ve son dört basamaklı kısımda yayın tarihini verir. Aşağıdaki uygulamada Sql Server’ın versiyonu görülür.

 

String baglanticümlesi=” workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind”;

SqlConnection baglantim=new SqlConnection(bağlantıcumlesi);

baglantim.Open();

MessageBox.Show(“Server ismi: “+baglantim.ServerVersion);

baglanti.Close();

 

SqlConnection.State Özelliği

 

Bağlantının o anki durumunu alır. Aşağıdaki uygulamada bağlantınızın o anki durumunu görebilirsiniz.

 

String baglanticümlesi=” workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind”;

SqlConnection baglantim=new SqlConnection(bağlantıcumlesi);

baglantim.Open();

MessageBox.Show(“Server ismi: “+baglantim.State.ToString());

baglanti.Close();

 

SqlConnection Methodları

SqlConnection.BeginTransaction Özelliği

 

Transaction işlemi bir işlem yapılırken hata oluşursa o ana kadar yapılan işlemlerin geri alınmasıdır. Bu işlemin başlamasını sağlayan özellikte SqlConnection nesnesinin BeginTransaction methodudur. Aşağıda bir transaction işleminin nasıl yapıldığını gösteren bir uygulama yeralmaktadır.

 

private void Form1_Load(object sender, System.EventArgs e)

            {

            SqlConnection baglanti=new SqlConnection("workstation id=METIA;packet size=4096;integrated security=SSPI;data source=METIA;persist security info=False;initial catalog=Northwind");

            baglanti.Open();

            SqlCommand komut=baglanti.CreateCommand();

            SqlTransaction trans;

                  trans=baglanti.BeginTransaction(IsolationLevel.ReadCommitted,"gerial");

                 

                  komut.Connection=baglanti;

                  komut.Transaction=trans;

                  try

                  {

                        komut.CommandText="insert into shippers  values (5,MeteYazılım,0525 456 79 45)";

                        komut.ExecuteNonQuery();

                        trans.Commit();

                  }

                  catch(Exception ee)

                  {

                        try

                        {

                             trans.Rollback("gerial");

                        }

                        catch(SqlException ex)

                        {

                             if (trans.Connection!=null)

                             {

                                   MessageBox.Show("rollback işlemi yapılırken hata oluştu"+ex.Message.ToString());

                             }

                        }

                        MessageBox.Show(ee.Message.ToString());

                  }

                  finally

                  {

                        baglanti.Close();

                  }

            }

 

SqlConnection.ChangeDatabase Methodu

 

O anki veritabanını değiştirir. Parametre olarak hangi database’i değiştirmek istiyorsak o databse’in ismini yazarız.

 

baglanti.ChangeDatabase(“pubs”);

 

SqlConnection.Close Methodu

 

Herhangi bir açık bağlantının kapatılması için kullanılır. Close methodu bekleyen transaction ları geri alır. Daha sonra bağlantı bağlantı havuzuna bırakılır veya bağlantı havuzu aktif değilse bağlantı kapanır.

 

baglanti.Close ();

 

SqlConnection.CreateCommand Methodu

 

SqlConnection ile ilişkilendirilmiş SqlCommand oluşturur.

                                                  

SqlCommand komut=baglanti.CreateCommand();

 

SqlConnection.Dispose Methodu

 

SqlConnection ile ilgili bütün kaynakları siler. Component’ten türetilmiştir.

 

Baglanti.Dispose();

 

SqlConnection.Open Methodu

 

Bağlantı cümlesi ile belirtilen database bağlantısını açar. Bağlantı havuzunda aktif bir bağlantı varsa kaynak olarak onu kullanır yoksa yeni bir örnek oluşturur.

 

baglanti.Open();

 

 

SqlConnection Olayları

SqlConnection.Disposed Olayı

 

Nesne üzerinde dispose olayını dinlemek için bir durum işleyici ekler.

 

public virtual event EventHandler Disposed;

 

SqlConnection.InfoMessage Olayı

 

SQL Server bir uyarı yada bilgi mesajı döndürdüğünde gerçekleşir. Bu olay işleyici SqlInfoMessageEventArgs tipinde parametre alır. SqlInfoMessageEventArgs özellikleri bu olayla ilgili bilgiler sağlar. Bu özellikler aşağıda anlatılmaktadır.

 

Özellik

Tanımlama

Errors

Server tarafından yollanan uyarıları alır.

Message

Veritabanı tarafından yollanan hata text’lerini alır.

Source

Hatayı üreten nesnenin ismini alır.

 

 

public event SqlInfoMessageEventHandler InfoMessage;

SqlConnection.StateChange Olayı

Bağlantının durumu değiştiğinde gerçekleşir. Bu olay işleyici StateChangeEventArgs tipinde parametre alır. StateChangeEventArgs özellikleri bu olayla ilgili bilgiler sağlar. Aşağıda bu özellikler anlatılmaktadır.

 

Özellik

Tanımlama

CurrentState

Bağlantının yeni durumunu alır. Olay gerçekleştiğinde bağlantı yeni durumunda olacaktır.

OriginalState

Bağlantının orjinal durumunu gösterir.

 

private void Form1_Load(object sender, System.EventArgs e)

            {

                sqlConnection1.Open();

            }

private void sqlConnection1_StateChange(object sender, System.Data.StateChangeEventArgs e)

            {

            MessageBox.Show("CurrentState: "+e.CurrentState.ToString()+"\n"+"OriginalState: "+e.OriginalState.ToString());

 

            }

Bu uygulamamızda bağlantımız ilk olarak kapalı. “sqlConnection1.Open();” komutu ile bağlantı açılır. SqlConnection.StateChange Olayı gerçekleşmekte ve System.Data.StateChangeEventArgs tipindeki e değişkenin CurrentState ve OriginalState özelliklerini kullnarak bağlantının o anki durumu açık ve orjinal durumunun’da kapalı olduğu görülür.

Özet

Bu makalede SqlConnection nesnesinin örneğinin nasıl oluşturulduğu, server ile bağlantının nasıl gerçekleştiği, SqlConnection nesnesinin en çok kullanılan özellikleri, methodları ve olaylarını anlatıldı. Bir sonraki makalede görüşmek dileğiyle.

Mete TUNCA

metetunca@hotmail.com