SQL Management Objects (SMO) 4

SQL Management Objects (SMO) 4

SQL Server Servislerini, network ayarlarını ve Server-Alias ayarlarını yönetmek için Windows Management Instrumentation (WMI) sınıfına ihtiyacımız olacak.

Yandaki resimde SMO WMI sınıfının hiyerarşisini görüyorsunuz. ManagedComputer sınıfı bu hiyerarşide en üstte bulunan sınıf. WMI sınıfını SQL Server"ı yönetmek için üç farklı yöntem kullanabilirsiniz bunlardan ilki Windows Management Instrumentation Query Language (WQL) editörü veya toolu, diğeri herhangi bir Script dilini kullanmak örneğin VbScript,Jscript ve son olarak ta ManagedComputer sınıfını kullanmak. Biz burada üçüncü yöntem olan ManagedComputer sınıfını kullanacağız.  Bu sınıfı sayfalarımızda kullanabilmek için Microsoft.SqlServer.WmiEnum sınıfını sayfamıza dahil ediyoruz (using Microsoft.SqlServer.Management.Smo.Wmi;). 

Sözü fazla uzatmadan örnekle WMI kullanımını anlatmaya başlayalım ilk örnekte localde bulunan SQL Server hakkında biraz bilgi alalım. Bu işlem için projeme bir wmi.aspx adında bir tane sayfa ekledim ve bu sayfayada bir buttonla bir tane label ekledim. Buttona tıklanınca localdeki SQL Server ile ilgili bilgileri labelda görüyor olalım.

protected void ButtonOzellik_Click(object sender, EventArgs e)

{

    Label1.Text = String.Empty;

    //ManegdComputer nesnemizi tanimlayalim...

     ManagedComputer mc = new ManagedComputer("BBAS-MOBILE");

    //Oncelikle baglantimiz hakkinda bilgi alalim..

    WmiConnectionInfo ConnInfo = mc.ConnectionSettings;

    Label1.Text += "
Server Name: " + ConnInfo.MachineName;

    Label1.Text += "
Username: " + ConnInfo.Username;

    Label1.Text += "
Timeout: " + ConnInfo.Timeout;

    //Server uzerinde tanimli olan Name Instance"lari gorelim..

    Label1.Text += "

Name Instances";

    foreach (ServerInstance NameInstance in mc.ServerInstances)

    {

        Label1.Text += "
" + NameInstance.Name;

    }

    //Server"da tanimli olan protokollere goz atalim...

    Label1.Text += "

Client Protokoller";

    foreach (ClientProtocol cp in mc.ClientProtocols)

    {

        Label1.Text += "
" + cp.DisplayName + " Durumu:" + (cp.IsEnabled ? "Enabled" : "Disabled");

    }

    //Server Alias"larina bakalim..

    Label1.Text += "

Server Aliases";

    foreach (ServerAlias sa in mc.ServerAliases)

    {

        Label1.Text += "
" + sa.Name;

    }

    //Servislere goz atalim...

    Label1.Text += "

Services";

    foreach (Service service in mc.Services)

    {

        Label1.Text += "
" + service.DisplayName + " " + service.ServiceState;

    }

}

Yukarıdaki kodlardan gördüğünüz gibi işe bir tane ManagedComputer nesnesi oluşturarak başlıyoruz. Bu nesne server ile bağlantıyı kurup bize gerekli nesneleri döndürüyor. ManagedComputer nesnesinin dört tane OverLoad yapılandırıcısı bulunuyor. Bunlardan biri içine parametre almayarak localdeki default instance"a bağlanıyor. Diğeri içine parametre olarak server adını alıyor. Diğer iki method ise server"a istediğimiz herhangi bir kullanıcı ile bağlanma fırsatı veriyor. Bizim burada kullandığımız parametre olarak makine adını kabul eden yapılandırıcı. İlk olarak bağlantı özelliklerini ekranda görüntüledik bunu ManagedComputer sınıfının ConnectionSettings metodu sayesinde gerçekleştirdik. ConnectionSetting metodu bize WmiConnectionInfo türünde bağalntı özelliklerini döndürüyor. Daha sonra ManagedComputer nesnemizin ServerInstances metodu ile Server"da tanımlı olan instance"ları gördük, ClientProtocols metodu ile tanımlı olan protokolleri ve durumlarına göz attık, hemen ardından ServerAliases metodu ile tanımlı olan Alias"ları gördük ve en son olarak da Services metodu ile tanımlı olan servisleri ve o andaki durumlarına göz attık... Şimdi sıra geldi bu servisler ile oynamaya... Bunun için sayfama bir tane CheckBoxlist sürükleyip bırakıyorum ve sayfanın PageLoad"ında da az önce öğrendiğimiz şekilde Servis adlarını bu CheckBoxList"e dolduruyorum. Eğer servis çalışıyorsa ilgili Item"ın işaretlenmesini istiyorum. Daha sonra Item"ın işareti değiştiğinde servis durumunun da değişmesi için gereken kodları yazıyor olacağız...

protected void Page_Load(object sender, EventArgs e)

{

    if (!Page.IsPostBack)

    {

        CheckBoxListServices.Items.Clear();

        //ManegdComputer nesnemizi tanimlayalim...

        ManagedComputer mc = new ManagedComputer("BBAS-MOBILE");

        int i = 0;

        foreach (Service service in mc.Services)

        {

            CheckBoxListServices.Items.Add(service.Name);

            if (service.ServiceState.ToString() == "Stopped")

            {

                CheckBoxListServices.Items[i].Selected = false;

            }

            else

            {

                CheckBoxListServices.Items[i].Selected = true;

            }

            i++;

        }

    }

}

CheckBoxList"te herhangi bir item seçilince çalışacak kod:

protected void CheckBoxListServices_SelectedIndexChanged(object sender, EventArgs e)

{

    //ManegdComputer nesnemizi tanimlayalim...

    ManagedComputer mc = new ManagedComputer("BBAS-MOBILE");

    for (int i = 0; i < CheckBoxListServices.Items.Count; i++)

    {

        if (CheckBoxListServices.Items[i].Selected)

        {

            mc.Services[CheckBoxListServices.Items[i].ToString()].Start();

        }

        else

        {

            mc.Services[CheckBoxListServices.Items[i].ToString()].Stop();

        }

    }

}

Yukarıdaki koddan da anlaşılacağı gibi Services nesnemizde bulunan Start() ve Stop() metodları ile servisi kapatıp açabiliyoruz bu kadar basit...

Şimdi de Server"a bir tane Alias tanımlayarak bu makale dizimi sonlandırmak istiyorum. Bu işlem için sayfama bir tane TextBox ve bir tane button ekliyorum. Buttona tıklanınca button textboxta yazan isimde bir tane alias tanımlasın...

protected void ButtonAliasTanimla_Click(object sender, EventArgs e)

{

    //ManegdComputer nesnemizi tanimlayalim...

    ManagedComputer mc = new ManagedComputer("BBAS-MOBILE");

    ServerAlias alias = new ServerAlias();

    alias.Name = TextBoxAliasName.Text;

    alias.ConnectionString = "1433";

    alias.Parent = mc;

    alias.ProtocolName = "tcp";

    alias.ServerName = "BBAS-MOBILE";

    alias.Create();

}

İşleme her zamanki gibi ManagedComputer nesnesini oluşturarak başlıyoruz. Ardından bir tane ServerAlias nesnesi tanımlayıp Alias"ın özelliklerini belirtiyoruz. Name özelliğini TextBox"tan alıyoruz, ConnectionString ile Alias"a erişilecek port numarasını belirttik, Parent ile Alias"ın parentını belirtiyoruz, ProtocolName ile Alias"ın kullanacağı protokolü belirttik, ServerName ile Alias"ın hangi server"da tanımlandığını belirterek tüm özellikleri belirtmiş olduk. Daha sonra Create() metodu ile Alias"ı oluşturduk. Oluşturduğumuz Alias"ı silmek için ise Drop() metodunu kullanabiliriz...

Döküman Arama

Başlık :

Kapat