Makale Özeti

SMO(SQL Management Objects) hakkında bol örnek...

Makale

Bir önceki yazımızda SMO (SQL Management Objects) kullanarak MS SQL Server 2005 özelliklerine erişebilen bir demo yapmış ve genel olarak SMO mimarisinden söz etmiştik. Bu yazımız ise tamamen örneğe dayalı olacak.

Üç demo yapacağız. Bunlardan birincisi bir önceki örneğimize benzer yapıda MS SQL Server 2005 özelliklerine erişecek. 1-2 özelliği listeledikten sonra bir listbox içine mevcut database lerin isimlerini ve boyutlarını getireceğiz. İkinci örneğimizde SMO kullanarak bir tablo ve alanlarını yaratacak, hatta tablo alanlarının özelliklerini yaratacağız. Üçüncü örneğimizde ise bir önceki demo da yarattığımız tablo alanlarının özelliklerini düzenleyeceğiz.

Aslında demoların içeriğini anlatırken bile SMO ile neler başarabileceğimizi kısaca özetlemiş olduk.

- SQL Server özelliklerine erişebiliriz
- Yeni database, tablo oluşturabiliriz
- Trigger, Stored Procedure,vs yapıları oluşturabiliriz
- RMO sayesinde Replication'ı yönetebiliriz.
- vs..

 

ÖRNEK1: Bu örneğimizde  MS SQL Server 2005 özelliklerine erişeceğiz. Formumuza SQL Server'ın 1-2 özelliğini ekrana getirebilmek için 2 label ve veritabanı/boyut listesi için bir listbox yerleştirelim. Ve elbette tüm aksiyonu başlatacak olan butonumuzu.

//SMO namespacelerimizi projemize dahil ediyoruz.
using Microsoft.SqlServer.Management.Common
using Microsoft.SqlServer.Management.Smo

//MS SQL Server'a bağlanmak için öncelikle bir connection nesnesi
//Ardından buna bağlı bir server nesnesi yaratıyoruz

ServerConnection Baglanti = new ServerConnection("EVREN", "sa", "123");
Server Svr = new Server(Baglanti);

//Bilgisini almak istediğimiz MS SQL Server'a bağlanıyoruz.
//Bağlantı Özelliklerine erişmek için nesnemizi yaratıyoruz.

SqlConnectionInfo BaglantiBilgi = new SqlConnectionInfo("EVREN");

//Dilerseniz sağladığınız bağlantı için veritabanı ismi gibi
//alanları özel olarak belirtebilirsiniz. Boş geçme şansınız var

BaglantiBilgi.DatabaseName = "AdventureWorks";
BaglantiBilgi.EncryptConnection = true;

//Labellarımıza sırasıyla SQL Server versiyon bilgisini
//Ve MasterDBPath bilgisini getiriyoruz.
//Not:MasterDBPath beta versiyonlarda ConnectionInfo değil Settings tabındaydı

label1.Text = Svr.Information.VersionString;
label2.Text = Svr.Information.MasterDBPath;

//Hazırlayacağımız bir döngü yapısında listbox'ımıza veritabanı ismi
//Ve boyutu bilgisini getireceğiz

foreach (Database db in Svr.Databases)
{
listBox1.Items.Add(db.Name + " : " + db.Size + "K");
}


    



ÖRNEK 2: Bu örneğimizde biraz daha veritabanı nesneleriyle çalışabiliyor olmak adına mevcut bir database de yeni bir tablo yaratacak  ve bu tabloya kolonlar ekleyeceğiz.

//SMO namespacelerimizi projemize dahil ediyoruz.
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

//MS SQL Server'a bağlanmak için öncelikle bir connection nesnesi
//Ardından buna bağlı bir server nesnesi yaratıyoruz

ServerConnection Baglanti = new ServerConnection("EVREN", "sa", "123");
Server Svr = new Server(Baglanti);

//Veritabanı nesnemizi yaratıyor ve mevcut bir veritabınını işaret ediyoruz
Database Veritabani = Svr.Databases["SQL2005DB"];

//Tablo isminde bir nesne yaratıyor ve daha önce yarattığımız veritabanı
//nesnesini kullanarak SMODEMOTABLE isminde bir tablo yaratmasını istiyoruz.

Table Tablo = new Table(Veritabani, "SMODEMOTABLE");

//Kolon isminde bir nesne yaratıyor ve bunun daha önce yarattığımız Tablo nesnesiyle
//ilişkili olduğunu belirtiyoruz.
//Bu nesne için isim ve veritipini bu aşamada tanımlıyoruz.

Column Kolon = new Column(Tablo, "Kolon1", DataType.Int);

//Yarattığımız Kolon1 nesnesi için yeni özellikler ekleyebiliriz
//Örneğin null olmaması gibi, yada primary key olması gibi
//Burada identity özelliğini true yapıyoruz

Kolon.Identity = true;

//Kolon1'i tablomuzla ilişkilendiriyor ve tablomuzu oluşturuyoruz
Tablo.Columns.Add(Kolon);
Tablo.Create();

label1.Text = "Bitti";
}



 


ÖRNEK 3: Bu örneğimizde ise bir önceki örneğimizde yarattığımız tablo alanı üzerinde bir takım değişiklikleri yapacağız. örneğin NullAble özelliğini true yapacak, Identity'i kaldıracağız.

//SMO namespacelerimizi projemize dahil ediyoruz.
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;

//MS SQL Server'a bağlanmak için öncelikle bir connection nesnesi
//Ardından buna bağlı bir server nesnesi yaratıyoruz

ServerConnection Baglanti = new ServerConnection("EVREN", "sa", "123");
Server Svr = new Server(Baglanti);

//Veritabanı nesnemizi yaratıyor ve SQL2005DB'yi eşitliyoruz
//Table nesnemizi yaratıyor ve hangi tablo üzerinde çalışacağımızı belirtiyoruz
//Column nesnemizi yaratıyor ve hangi column üzerinde çalışacağımızı belirtiyoruz

Database Veritabani = Svr.Databases["SQL2005DB"];
Table Tablo = Veritabani.Tables["SMODEMOTABLE"];
Column Kolon = Tablo.Columns["Kolon1"];

//Kolon Nullable ve Identity özelliklerini düzenliyoruz
Kolon.Nullable = true;
Kolon.Identity = false;

//İşlemi onaylıyoruz
Kolon.Alter();




Evren AYAN
Microsoft MVP
http://www.evrenayan.net