14 Ocak 2008 Pazartesi

SMO(SQL Management Object)

SMO(SQL Management Object)

SQL Server 2005, veritabanı yöneticisinin yapması gereken yönetimsel işlemleri gerçekleştirmek için SMO(SQL Managenent Object) API’leri(Application Programming Interface) sunar.

SMO ile SQL 2005 üzerindeki nesne ve görevleri Visual Studio 2005 üzerinden programlayabilirsiniz. SMO ile yapılan yönetimsel işlemlere; SQL Server’ın konfigrasyon ayarlarına erişmek veya düzenlemek, yeni veritabanı oluşturmak, yedek almak veya geri yüklemek, zamanlanmış yedek almak ve SQL Server üzerindeki Job’ları yönetmek sayılabilir. SMO ile kod geliştirmek için Visual Studio 2005 projesine “Microsoft.SqlServer.Smo.dll” kütüphanesini eklemelisiniz.

Visual Studio 2005 ile, SQL Server 2005’in bağlantı bilgilerini gösteren, yeni veritabanı oluşturan, tüm veritabanlarını listeleyen ve seçilen veritabanının yedeğini alan bir proje geliştirelim.




SMO ile proje geliştirmek için Windows Application oluşturun. Projenin içerisine “Microsoft.SqlServer.Smo” ve “Microsoft.SqlServer.ConnectionInfo” kütüphanelerini(assembly) ekleyin.
Projenin kod satırına aşağıdaki kodları import edin.

Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common

Projenin içerisine aşağıdaki formda görüldüğü gibi 6 Label, 6 TextBox ve 1 Button ekleyin. TextBox nesnelerinin isimlerini sırasıyla txtEdition, txtLanguage, txtOSVersion, txtPlatform,txtProduct,txtVersion olarak değiştirin. Butonun ismini ise btnConnectionInfo olarak değiştirin.



Projenin Declaritions tanımlama bloğuna aşağıdaki tanımlayı yapın. Bu kod ile yeni bir Server nesnesi tanımlıyoruz.
Dim myServer As New Server()
Form nesnesinin Load olayına aşağıdaki kodları ekleyin. Bu kod bloğu içerisinde tanımlanan conn nesnesinin ServerInstance metoduna bağlanacağınız SQL Server’ın adını girin.

Dim conn As ServerConnection = myServer.ConnectionContext
conn.ServerInstance = "tamers\Seminer"
conn.Connect()
btnConnectionInfo butonunun click olayına aşağıdaki kodu ekleyin. Bu kod ile Server nesnesisinin özelliklerini TextBox nesnelerinin içerisine yazıyoruz.
txtEdition.Text = myServer.Information.Edition
txtLanguage.Text = myServer.Information.Language
txtOSVersion.Text = myServer.Information.OSVersion
txtPlatform.Text = myServer.Information.Platform
txtProduct.Text = myServer.Information.Product
txtVersion.Text = myServer.Information.VersionString

SMO ile projenin diğer bölümlerini tanımlamak için aynı forma, sırasıyla 1 ListBox, 1 Label, 1 TextBox ve 3 Button ekleyin. Form nesnesinin görüntüsü aşağıdaki gibi olacaktır.


ListBox nesnesinin ismini lstDatabases, TextBox nesnesinin ismini txtNewDatabase, butonların ismini ise sırasıyla btnCreateDb, btnBackup ve btnDatabaseList olarak değiştirin.
btnDatabaseList(Veritabanlarını Listele) butonunun click olayına aşağıdaki kodu ekleyin. Bu kod ile SQL Server 2005 deki tüm veritabanlarını ListBox içerisene dolduruyoruz.

lstDatabases.Items.Clear()
For i As Integer = 0 To myServer.Databases.Count - 1
lstDatabases.Items.Add(myServer.Databases(i).Name)
Next

btnCreateDB(Veritabanı Oluştur) butonunun içerisine aşağıdaki kodu ekleyin. Bu kod txtNewDatabase isimli TextBox kontrolunun içerisine girilen isimde veritabanı oluşturur. Veritabanı oluşturmak için Database sınıfını kullanıyoruz.

If txtNewDatabase.Text <> "" Then
Dim newDb As Database = New Database(myServer, txtNewDatabase.Text)
newDb.Create()
End If

btnBackup butonunu içerisine aşağıdaki kodu ekleyin. Bu kod lstDatabases kontrolunun içerisinden seçilen veritabanın yedeğini alır. Seçili veritabanının yedeğini almak için Backup sınıfını kullanıyoruz.

If lstDatabases.SelectedIndex <> -1 Then
Dim dbName As String = lstDatabases.SelectedItem.ToString
Dim MyBackup As New Backup
MyBackup.Action = BackupActionType.Database
MyBackup.BackupSetName = dbName & "Backup"
MyBackup.Database = dbName
MyBackup.Devices.AddDevice("C:\" & dbName.ToString & ".bak", DeviceType.File)
MyBackup.SqlBackup(myServer)
MessageBox.Show(dbName & " backup'ı alınmıştır.")
End If

Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

1 yorum:

Adsız dedi ki...

merhaba

tabloların içerisindeki kayıtları bir gridview da listeletiyorum, sorunum bu tabloda update işlemi yapmakta.

bir listboxta listenen tablo adlarından bi tanesi seçildiğinde

SqlConnection conn = new SqlConnection(@"Data Source=" + serverName + ";Initial Catalog=" + LbDataBase.SelectedItem.Text + ";Persist Security Info=True;User ID=" + server.ConnectionContext.Login.ToString() + ";Password=" + server.ConnectionContext.Password.ToString());
conn.Open();
string cmd = "select * from " + LbTables.SelectedItem.Text;
SqlDataAdapter adpt = new SqlDataAdapter(cmd, conn);
DataTable tbl = new DataTable();
adpt.Fill(tbl);
Session["Table"] = tbl;
Session["TableName"] = LbTables.SelectedItem.Text;
GridView1.DataSource = tbl;
GridView1.DataBind();

şeklinde bir gridview da kayıtlar listeleniyor.

sorunum update ifadesini yazmakta where koşulunu neye göre belirleyeceğimi kestiremiyorum, yardımcı olabilirseniz çok sevinirim.

arzu