15 Mayıs 2012 Salı

ADO.NET 'de SqlConnectionStringBuilder ile Database Engine

Merhaba arkadaşlar.
Bu yazımda Ado.Net 'de "connected" yada "disconnected" mimaride "connection string" oluşturmamızı sağlayan bir sınıftan bahsedeceğiz. "SqlConnectionStringBuilder" adından da anlaşılacağı üzere "System.Data.SqlClient" provider 'ının altındadır. "Builder" pattern 'i ile yazılmıştır. Geriye bir "connection string"  döndürür. "Connection string" in tüm parametreleri bu sınıfa verilebilir(set), verildikten sonra bu sınıftan okunadabilir. İki çeşit kullanımı vardır. İstenirse parametreleri bu sınıfın nesnesine teker teker verilerek "connection string" oluşturulur. Biraz sonra bir arayüz tasarlayarak kullanıcıdan alınan connection string parametrelerinde bir connection string oluşturacağız. Bu kullanıma tüme varım denir. Ama bu kullanım öncesinde, diğer bir kullanıma örnek vermek gerekirse, aşağıda görüldüğü gibi, "SqlConnectionStringBuilder" sınıf nesnesinin parametre olarak "connection string" alan bir overload 'u vardır, bu overload kullanılarak "connection string" verilir. Daha sonra "connection string" 'in  istenilen özelliği get edilir.

    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder("Server=. ; Database=Northwind ; Uid=sa ; Pwd=1; MultipleActiveResultSets=true");
    MessageBox.Show(builder.MultipleActiveResultSets.ToString());

Şimdi ise bir tüme varım kullanımı görelim. Sonuç olarak bir tane "connection string" oluşturacağız. Bunu daha eğlenceli hale getirmek için Sql Server 'ımıza bağlanırken Database Engine penceresi gibi bir arayüz tasarlayalım. Sonuçta Sql Server 'ımıza bağlanırken Database Engine penceresinde de "connect" demeden önce seçimlerimize göre arka planda bir "connection string" oluşturuyoruz. Şimdi işe aşağıdaki gibi bir arayüz tasarlayalım.

Daha sonra kodlarımızı yazalım. Dikkat edilmesi gerek nokta "Authentication" tipine göre "user id" ve "password" parametrelerinin "enable" durumlarıdır. Eğer "windows auth" ile bağlanıyorsam bu parametrelerin "enable" durumu "false" olacaktır. Aynı zamanda ilişkili kontrollerin de "enable" durumlarını false yapabiliriz.

SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder();
private void btnConnect_Click(object sender, EventArgs e)
{
    cb.DataSource = txtServerName.Text;
    cb.InitialCatalog = txtDatabase.Text;
    cb.IntegratedSecurity = !txtUserName.Enabled;
    if (!cb.IntegratedSecurity)
    {
        cb.UserID = txtUserName.Text;
        cb.Password = txtPassword.Text;
    }
    MessageBox.Show(cb.ConnectionString);
}

private void cmbAuthentication_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cmbAuthentication.SelectedIndex == 0)
    {
        txtUserName.Enabled = txtPassword.Enabled = lblUserName.Enabled = lblPassword.Enabled = false;
        return;
    }
        txtUserName.Enabled = txtPassword.Enabled = lblUserName.Enabled = lblPassword.Enabled = true;
}
  
Görüldüğü üzere istediğimiz kontrolleri gerçekleştirdik. Şimdi bir connection string oluşturalım ve message box 'da gösterelim. İlk önce "windows auth" ile deneyelim.

Şimdi bir de "sql auth" ile deneyelim.

Checked box larla connection string in MARS ve Pooling parametrelerini de kontrol edebilirdik. Umarım faydalı olabilmişimdir. Başka bir yazıda görüşmek dileğiyle, hoşçakalın...

1 yorum:

  1. Selam Hocam birden fazla veri tabanı için nasıl bir yol izlenmeli sql sunucumuzda 2 ayrı db var bunları nasıl çekebiliriz.

    YanıtlaSil