tag:blogger.com,1999:blog-6501107854818923929.post-2938915219081876582008-01-14T06:05:00.000-08:002008-01-14T06:13:47.079-08:00SMO(SQL Management Object)<strong>SMO(SQL Management Object)</strong><br /><div><br /></div><div>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. </div><br /><div>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.</div><br /><div>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.</div><br /><div><a href="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4tspZ20LrI/AAAAAAAAAC0/--aTRT-BqDU/s1600-h/1000000351_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155333657026899634" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4tspZ20LrI/AAAAAAAAAC0/--aTRT-BqDU/s400/1000000351_image001.jpg" border="0" /></a><br /></div><br /><div></div><br /><div>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. </div><div> </div><div>Projenin kod satırına aşağıdaki kodları import edin.</div><br /><div><span style="color:#3333ff;">Imports Microsoft.SqlServer.Management.Smo<br />Imports Microsoft.SqlServer.Management.Common</span></div><br /><div>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.</div><br /><div><a href="http://4.bp.blogspot.com/_ybjaTHsa6dA/R4ts7p20LsI/AAAAAAAAAC8/2nhPDli5vLw/s1600-h/1000000351_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155333970559512258" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_ybjaTHsa6dA/R4ts7p20LsI/AAAAAAAAAC8/2nhPDli5vLw/s400/1000000351_image002.jpg" border="0" /></a><br /></div><br /><div></div><div>Projenin Declaritions tanımlama bloğuna aşağıdaki tanımlayı yapın. Bu kod ile yeni bir Server nesnesi tanımlıyoruz.</div><div><span style="color:#3333ff;"></span> </div><div><span style="color:#3333ff;">Dim myServer As New Server()</span><br /></div><div>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.</div><br /><div></div><div><span style="color:#3366ff;"><span style="color:#3333ff;">Dim conn As ServerConnection = myServer.ConnectionContext<br />conn.ServerInstance = "tamers\Seminer"<br />conn.Connect()</span></span></div><div> </div><div>btnConnectionInfo butonunun click olayına aşağıdaki kodu ekleyin. Bu kod ile Server nesnesisinin özelliklerini TextBox nesnelerinin içerisine yazıyoruz.</div><div><span style="color:#3333ff;"></span> </div><div><span style="color:#3333ff;">txtEdition.Text = myServer.Information.Edition<br />txtLanguage.Text = myServer.Information.Language<br />txtOSVersion.Text = myServer.Information.OSVersion<br />txtPlatform.Text = myServer.Information.Platform<br />txtProduct.Text = myServer.Information.Product<br />txtVersion.Text = myServer.Information.VersionString</span></div><br /><div>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.</div><br /><div></div><a href="http://2.bp.blogspot.com/_ybjaTHsa6dA/R4tthJ20LtI/AAAAAAAAADE/SrXGoZzjDpQ/s1600-h/1000000351_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155334614804606674" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_ybjaTHsa6dA/R4tthJ20LtI/AAAAAAAAADE/SrXGoZzjDpQ/s400/1000000351_image003.jpg" border="0" /></a><br /><div> </div><div>ListBox nesnesinin ismini lstDatabases, TextBox nesnesinin ismini txtNewDatabase, butonların ismini ise sırasıyla btnCreateDb, btnBackup ve btnDatabaseList olarak değiştirin.<br />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.</div><div><br /><span style="color:#3333ff;">lstDatabases.Items.Clear()<br />For i As Integer = 0 To myServer.Databases.Count - 1<br />lstDatabases.Items.Add(myServer.Databases(i).Name)<br />Next</span></div><div><br />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.</div><div><br /><span style="color:#3333ff;">If txtNewDatabase.Text <> "" Then<br />Dim newDb As Database = New Database(myServer, txtNewDatabase.Text)<br />newDb.Create()<br />End If</span></div><div><br />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.</div><div><br /><span style="color:#3333ff;">If lstDatabases.SelectedIndex <> -1 Then<br />Dim dbName As String = lstDatabases.SelectedItem.ToString<br />Dim MyBackup As New Backup<br />MyBackup.Action = BackupActionType.Database<br />MyBackup.BackupSetName = dbName &amp; "Backup"<br />MyBackup.Database = dbName<br />MyBackup.Devices.AddDevice("C:\" &amp; dbName.ToString &amp; ".bak", DeviceType.File)<br />MyBackup.SqlBackup(myServer)<br />MessageBox.Show(dbName &amp; " backup'ı alınmıştır.")<br />End If</span></div><div><br />Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a></div><div> </div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6501107854818923929-293891521908187658?l=tamersahiner.blogspot.com'/></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.com0