Distrubuted Management Objects

Dark-Man

Kıdemli Üye
5 Ocak 2013
4,430
9
I Don't Know
Bilgisayarımıza Microsoft Sql Server?ı yüklediğimizde sisteme otomatik olarak bir DLL dosyası eklenmektedir. Bu kütüphane sayesinde server ımızdaki veri tabanlarına erişimin yanı sıra, tablo yaratmak, değişken tanımlamak, backup almak gibi Sql Server?daki bir çok işleme de olanak sağlar. Bir uygulama eşliğinde Sql-DMO ?yu anlatmaya çalışalım. İlk önce referansımızı ekleyelim :

1000000709_image001.jpg


Şimdide tasarımımızı yapalım. Bunun için 1 combobox, 2 listbox ve 2 tane de button kullanacağız. Combobox?ımıza veritabanlarının ismini listeleyecek, buradan seçtiğimiz veritabanına göre mevcut tablolarımızı göstereceğiz. Gene aynı şekilde buradan seçeceğimiz tablo adına göre de diğer listbox?ta tablodaki kolonların isimleri ve tiplerini göstereceğiz. Buttonlar ile de backup ve restore işlemlerini gerçekleştireceğiz.

1000000709_image002.jpg



Kod kısmına geçelim :
VB.NET
Imports SQLDMO
Dim server As New SQLServerClass
Değişkenimizi tanımladıktan sonra Form Load eventimizde combobox?ımızı veritabanı isimleri ile dolduralım :
server.Connect("KOCAASAASDSA-F02", "sa", )
For Each db As SQLDMO.Database In server.Databases
ComboBox1.Items.Add(db.Name)
Next
server.DisConnect()
Combobox?ımızdan seçilen veritabanına göre listbox?ımızı doldurma işleminde ise ComboBox1_SelectedIndexChanged eventine :
ListBox1.Items.Clear()
server.Connect("KOCAASAASDSA-F02", "sa", )
For Each db As Database In server.Databases
If db.Name = ComboBox1.SelectedItem Then
Dim tbl As SQLDMO.Table
For Each tbl In db.Tables
If Not tbl.TypeOf = SQLDMO_OBJECT_TYPE.SQLDMOObj_SystemTable Then
ListBox1.Items.Add(tbl.Name)
End If
Next
End If
Next
server.DisConnect()
Şimdide seçilen tabloya göre tabloyu oluşturan değişkenleri ve değişkenlerin tiplerini listeleyelim:
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
ListBox2.Items.Clear()
Dim tbl As New SQLDMO.Table
Dim clm As New SQLDMO.Column
server.Connect("KOCAASAASDSA-F02", "sa", )
For Each db As Database In server.Databases
If db.Name = ComboBox1.SelectedItem Then
For Each tbl In db.Tables
If tbl.Name = ListBox1.SelectedItem Then
For Each clm In tbl.Columns
ListBox2.Items.Add(clm.Name & " " & clm.PhysicalDatatype)
Next
End If
Next
End If
Next
server.DisConnect()
End Sub
DMO kütüphanesi bize veritabanı bilgilerini görmemizin yanı sıra kütüphanedeki çeşitli class lar sayesinde server?ı yönetmemize de olanak vermektedir. Örneğin veritabanlarımızın backuplarını alabilir veya backup?ı alınmış fakat daha sonralardan veritabanı silinmiş olan dosyalarımız restore edebiliriz. İlk önce Backup işleminin nasıl yapılacağına bir bakalım :
Dim database As New SQLDMO.Database
Dim backup As New SQLDMO.Backup
Try
server.LoginSecure = True
server.Connect("KOCAASAASDSA-F02", "sa", )
database = server.Databases.Item(ComboBox1.SelectedItem) 'veritabanımızın adını aldık
backup.Database = database.Name
backup.Files = "c:\" & ComboBox1.SelectedItem & "_BackUp.bak"
'kaydedilecek yer
backup.SQLBackup(server)
server.DisConnect()
MessageBox.Show("Basarildi")
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Restore işlemi de backup alma işlemine oldukça benzemektedir. Daha önceden backup ?ı alınmış sonrada silinmiş veritabanımızı restore etmek için buttonumuzun Click eventine :
Dim database As New SQLDMO.Database
Dim res As New SQLDMO.Restore
Try
server.LoginSecure = True
server.Connect("KOCAASAASDSA-F02", "sa", )
Dim vt As New DatabaseClass
vt.Name = "Northwind"
server.Databases.Add(vt)
res.Database = " Northwind"
res.Files = "c:\ Northwind_BackUp.bak"
res.SQLRestore(server)
server.DisConnect()
MessageBox.Show("Basarildi")
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Programımızı çalıştırdığımızda :

1000000709_image003.jpg



Şimdide ikinci bir tasarım yapalım. Bu form sayesinde de yeni bir veritabanı, tablo ve tablolara ait değişkenler yaratalım.

1000000709_image004.jpg



Combobox?ımızı en çok kullandığım değişken tipleri ile doldurduk. Ekle Buttonumuza bastıkça tanımladığımız değişken tipleri arraylist aracılığıyla datagridimize dolacaktır. Database Oluştur buttonumuz sayesinde de ilk önce veritabanı oluşturulacak daha sonra tablo oluşturulacak ve en sonda da datagridimizdeki değişken tipleri ile tablomuz dolacaktır. İlk önce değişken adları ve değişken türleri için bir class yazalım :
Public Class dizim
Private dad As String 'değişken adı
Private dtur As String 'değişken türü
Public Property Ad() As String
Get
Return dad
End Get
Set(ByVal Value As String)
dad = Value
End Set
End Property
Public Property Tur() As String
Get
Return dtur
End Get
Set(ByVal Value As String)
dtur = Value
End Set
End Property
Sub New(ByVal kdad As String, ByVal kdtur As String)
Ad = kdad
Tur = kdtur
End Sub
Sub New()
End Sub
End Class
Imports SQLDMO dedikten sonra global değişkenimizi tanımlayalım. Dim List As New ArrayList
Ekle buttonuna bastıkça tanımladığımız değişken tiplerini datagrid?te göstermesi için :
Dim d As New dizim(txtDegisken.Text, ComboBox1.SelectedItem)
List.Add(d)
DataGrid1.DataSource = Nothing
DataGrid1.*******()
DataGrid1.DataSource = List
DataGrid1.*******()
Geriye yapmamız gereken sadece veritabanını,tabloyu ve değişkenlerimizi uygulamaya geçirmek.
server.Connect("KOCAASAASDSA-F02", "sa", )
Try
'''''yeni Database Tanımlıyoruz'''''
Dim vt As New DatabaseClass
vt.Name = TextBox1.Text
server.Databases.Add(vt)
''''Yeni Tablo Tanımlıyoruz'''''
Dim tb As New TableClass
tb.Name = txtTablo.Text
''''Kolonların Tanımlanmaası''''''''''
For i As Integer = 0 To List.Count - 1
Dim col As New ColumnClass
col.Name = CType(List.Item(i), dizim).Ad
col.Datatype = CType(List.Item(i), dizim).Tur
tb.Columns.Add(col)
Next
vt.Tables.Add(tb)
server.DisConnect()
MessageBox.Show("basarildi")
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
server.DisConnect()

1000000709_image005.jpg



Bazı değişkenlerimizin sadece kendine ait özellikleri bulunmaktadır.
'değişkenimizin otomatik olarak artmasını istersek :
Dim col As New ColumnClass
col.Name = "ID"
col.Datatype = "int"
col.Identity = True
col.IdentitySeed = 0
col.IdentityIncrement = 1
'değişkenimizin büyüklüğünü belirtmek istersek :
Dim col As New ColumnClass
col.Name = "Ad"
col.Datatype = "varchar"
col.Length = 30
'Primary key eklemek istersek :
Dim pk As New Key
pk.Clustered = True
pk.Type = SQLDMO_KEY_TYPE.SQLDMOKey_Primary
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.