SQL Management Objects (SMO) 3

SQL Management Objects (SMO) 3 Login"leri ve User"ları yönetmek SQL Server"da SQL Server Authentication kullanılırken mutlaka kullanıcı tanımlaması yapmak durumundasınız. Bu kullanıcıların sisteme oturum açmak için kullandıkları kullanıcı adları"nı Login diye adlandırıyoruz, Login"ler direkt Database"e erişemezler bunun için de User tanımlamak durumundasınız ve User"ın hangi Login ile sisteme giriş yapacağını belirlemek zorundasınız. SMO"da bu işin nasıl yapılacağını anlatmadan önce öncelikle bu işi SQL Server Management Studio"dan gerçekliyorum. Daha önceki makalemde Burak adında bir tane Database oluşturmuştum şimdi bu Database"i yönetecek kullanıcıyı sisteme öncelikle SQL Server Management Studio üzerinden daha sonra da başka bir kullanıcıyı da SMO ile dahil edelim. Öncelikle bir tane Login tanımlayalım; bu işlem için Object Explorer"dan Server"ımızı seçip Security bölümünden Logins"in üzerine sağ tıklayıp New Login sekmesini tıklayalım. Karşınıza gelen ekrandan kullanıcının adını girip Authentication türünü belirleyelim. Burada SQL Server Authentication"ı seçiyoruz. Şifreyi de girdikten sonra alttan Database"i seçip Ok"ye yıklayınca Login tanımlanmış olacak. Ancak seçtiğiniz Database"in Security kısmında Users bölümüne baktığınızda bu Login"i göremeyeceksiniz çünkü biz sadece Login tanımladık. Bu Login"in herhangi bir Database üzerinde yetkisi yok. Burak Database"inin Security bölümüne gidip Users"ın üzerinde sağ tıklayıp New User sekmesine tıklıyorum. Karşıma yukarıdaki ekran gibi bir ekran gelecek. Burada kullanıcı adını dene olarak belirliyorum ve bu kullanıcı için daha önceden tanımlamış olamam gereken bir tane Login (deneme"yi az önce oluşturmuştum) seçiyorum.  Gerekli izinleri de verdikten sonra Ok tuşuna bastığımda artık deneme isimli Login ile sisteme girip sadece Burak Database"i üzerinde işlem yapabilirim. Şimdi bu işlemleri SMO ile gerçekleyelim. Öncelikle sistemde tanımlı olan tüm Login"leri listeleyerek işe başlayalım ve bunların arasına yeni bir tane daha ekleyerek devam edelim. Bu işlem için aspx sayfama bir tane listbox bir tane textbox ve bir tane de button ekliyorum. Buttona tıklanınca textbox"ın indeki değer adında bir tane Login oluşturulacak ve Page_Load"da da listbox"ın içi tüm loginler ile doldurulacak. Aşağıda bu işlemler için yazdığım kodları görüyorsunuz... protected void Page_Load(object sender, EventArgs e) {     if (!Page.IsPostBack)     {         Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...         LbLoginler.Items.Clear();         foreach (Microsoft.SqlServer.Management.Smo.Login login in server.Logins)        {             LbLoginler.Items.Add(login.Name);        }     } } Her zaman olduğu gibi bir tane Server nesnesi tanımlıyoruz. Sistemdeki Login"leri server nesnemizin Logins metodu ile alıyoruz. Yukarıdaki döngüde Login adında bir tane daha nesne kullandığımı fark etmiş olmalısınız bu nesne SQL Server"daki Login nesnesinin özelliklerini taşıyor.  Ekle Buttonuna tıklanınca çalışacak kodlar ise şöyle: protected void ButtonEkle_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...     Microsoft.SqlServer.Management.Smo.Login login = new Microsoft.SqlServer.Management.Smo.Login(server, TbLoginAdi.Text);//Login"in hangi server"da oluşturulacağını ve adını bildirdik..     login.LoginType = LoginType.SqlLogin;//Login tipini belirttik...     login.Create("1111");//Password"u belirtip logini oluşturduk...     //listbox"ı yeniden dolduralım...     LbLoginler.Items.Clear();     foreach (Microsoft.SqlServer.Management.Smo.Login loginlistele in server.Logins)     {         LbLoginler.Items.Add(loginlistele.Name);     } } Öncelikle bir tane Login nesnesi oluşturarak işe başladık. Login"in hangi server"da oluşturulacağını ve adını belirttikten sonra alt satırda loginin tipini SqlLogin olarak belirttik. Create metodu"nun içinde parolasını"da 1111 olarak belirleyip logini oluşturduk. Hemen alttaki kodlarda da yeni oluşturduğumuz login ile birlikte mevcut loginleri yeniden listeliyoruz. Şimdi sıra geldi bir tane User oluşturmaya. Yukarıda da yaptığımız gibi gene Burak Database"ine bir tane User ekleyeceğiz tabii daha önce bu Database"in User"larını görüntülemek lazım. Bu işlem için sayfama iki tane listbox, bir tane text box, bir tane dropdownlist ve bir tane de button sürükleyip bırakıyorum. Listbox"lardan birinde sistemdeki Database"ler listelecek daha sonra bunun SelectedIndexChanged olayında da seçilen Database"in mevcut User"ları listelenecek. Yeni User eklerken de textbox User"in adını, dropdownlist"ten seçlen item User"ın login"ini belirleyecek. Neyse fazla konuşmadan örneğe geçelim. Daha önceki makalemde açıkladığım için Database"lerin listbox"a getirilmesini burada açıklamıyorum. Herhangi bir Database seçildikten sonraki bölümü burada açıklıyor olacağım. protected void LbDataBase_SelectedIndexChanged(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");     Database db=server.Databases[LbDataBase.SelectedItem.ToString()];     LbUser.Items.Clear();     foreach (User user in db.Users)     {     LbUser.Items.Add(user.Name);     } } Database sınıfımızın Users metodu bize o Database"de tanımlı olan User"ları döndürüyor. Yukarıdaki kod parçacığı da bunları teker teker listbox"a ekliyor. Şimdi bir de yeni bir tane User ekleyelim. ButtonEkle"nin click event"ini aşağıda görüyorsunuz... protected void ButtonEkle_Click(object sender, EventArgs e) {     Server server=new Server(@"BBAS-MOBILESQL2005");     User user=new User(server.Databases[LbDataBase.SelectedItem.ToString()],TbUserName.Text);     user.Login=DdlLogin.SelectedItem.ToString();     user.Create();     //Yeni eklediğimiz user"ı görebilmek için listbox"ı yeniden dolduruyoruz...     LbUser.Items.Clear();     foreach (User usershow in server.Databases[LbDataBase.SelectedItem.ToString()].Users)     {         LbUser.Items.Add(usershow.Name);     } } Yukarıdaki kodlar la Database"imize bir tane User ekliyoruz. Öncelikle bir tane User nesnesi tanımlamakla işe başlıyoruz nesne tanımlanırken Database adını ve yeni oluşturulacak User"ın adını belirtiyoruz (Bu değerleri dinamik olarak alıyor.) . Daha sonra bir alt satırda da bu User"ın Login"ini belirliyoruz. User.Create() metodu ile de yeni User seçili olan Database"e eklenmiş oluyor bu kadar basit. Rolleri Yönetmek Roller SQL Server"da User"ların haklarını belirlemek için kullanılıyor. Az önce tanımladığımız User"lar sadece Database"e bağlanabilirler veriler üzerinde herhangi bir işlem yapamazlar çünkü bu User"ları herhangi bir Role grubuna dahil etmedik. Az sonra yapacağımız örneklerle dene User"ı Database"e veri girebiliyor ve Database"den veri okuyabiliyor olacak ama öncesinde Burak Database"inde tanımlı olan tüm Role"leri ve bu Role"lere üye olan User"ları görüntüleyelim. Bu işlem için aspx sayfamda uygun bir yere bir tane Label sürükleyip bırakıyorum ve az önce de kullandığımız LbDataBase_SelectedIndexChanged olayına gerekli kodları ekliyorum. Olayın son halini aşağıda görüyorsunuz. protected void LbDataBase_SelectedIndexChanged(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");       //User"ları getiren bölüm...     LbUser.Items.Clear();     Database db=server.Databases[LbDataBase.SelectedItem.ToString()];     foreach (User user in db.Users)     {         LbUser.Items.Add(user.Name);     }     //Role"leri getiren bölüm...     LabelRole.Text = "";     foreach (DatabaseRole DbRole in db.Roles)     {         LabelRole.Text += ""+DbRole.Name+"
";         foreach (String RoleUser in DbRole.EnumMembers())         {             LabelRole.Text+="   "+RoleUser+"
";         }     } } Role"leri döndürmek için bir tane DatabaseRole nesnesi oluşturuyoruz, Database sınıfının Roles() metodu da bize o Database"de tanımlı rolleri döndürüyor. Daga sonra tanımladığımız DatabaseRole nesnesinin metodlarını kullanarak ekrana verileri basabiliyoruz. Ben burada sadece Name ve EnumMemebers metodlarını kullandım daha bir çok metod olduğu tabii ki şüphesiz. NetronInfo Database"inde tanımlı olan Role"ler ve bu Role"lere üye User"ları yanda görüyorsunuz.             Şimdi dene User"ımızı db_datareader ve db_datawriter Role"lerine dahil edelim. Bunun için User"ların listelendiği listbox"ın altına bir tane CheckBoxList ve onun altına bir tane Button ekliyorum. Button"un click eventi"ne herhangi birşey yapmadan önce Role isimleri CheckBoxList"i dolduracak şekilde Database listbox"ının selectedindexchanged olayını değiştiriyorum. Buttona basınca seçilen User işaretlenen Role"lere dahil olsun istiyorum. Button"a tıklanınca çalışacak kodları aşağıda görüyorsunuz.   protected void ButtonRoleTanimla_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");     Database db = server.Databases[LbDataBase.SelectedItem.ToString()];     User user = db.Users[LbUser.SelectedItem.ToString()];     for (int i = 0; i < CblRole.Items.Count; i++)     {         if (CblRole.Items[i].Selected)         {             user.AddToRole(CblRole.Items[i].Text);         }     }     //Değişiklikleri görebilmek için rolleri yeniden yüklüyoruz...     CblRole.Items.Clear();     LabelRole.Text = "";     foreach (DatabaseRole DbRole in db.Roles)     {         CblRole.Items.Add(DbRole.Name.ToString());         LabelRole.Text += "" + DbRole.Name + "
";         foreach (String RoleUser in DbRole.EnumMembers())         {             LabelRole.Text += "   " + RoleUser + "
";         }     } } Herhangi bir User"ı bir Role"e dahil etmek çin User nesnesinin AddToRole metodunu kullandık. Bu metod parametre olarak User"ın dahil edileceği rolün adını alıyor ve User"ı o role dahil ediyor. Tanımla buttonuna basmadan önce Burak Database"ini ardından da dene"yi seçtim. Dene user"ına eklemek istediğim Role"leri de işaretledikten sonra Tanımla Buttonuna bastım. Bu işlemden sonra dene User"ının db_datareader ve db_datawriter Role"lerine dahil olduğunu görüyorsunuz.                     Server Rollerini Yönetmek Server rolleri bir kullanıcının server üzerindeki haklarını belirler. Az önceki örneklerde herhangi bir kullanıcının Database üzerindeki hakları ile ilgilenmiştik şimdi ise herhangi bir kullanıcının server üzerindeki hakları ile ilgileniyoruz. SQL Server"da tanımlı olan Server Rollerine Security bölümünde yer alan Server Roles bölümünden erişebilirsiniz, az sonra bu rolleri ASP.NET üzerinden de görüyor ve yönetebiliyor olacağız. Bu işlem için projeme ServerRoles.aspx adında bir tane sayfa ekliyorum ve bu sayfanın dizaynını da yanda gördüğünüz gibi gerçekliyorum. Sayfa ilk yüklenirken sistemde tanımlı tüm Loginleri bir tane listboxta ve tüm Server rollerini de bir tane checklistboxta görüntüleyeceğiz. Loginlerin nasıl görüntülendiğini daha önce açıklamıştım. Bu bölümde sadece Server rollerinin nasıl görüntülendiğini açıklıyorum aşağıdaki kodlar PageLoad"da yer alan Server rollerini listeleyen kodlardır. Kodların daha önceki örneklere oldukça benzediği dikkatinizden kaçmamıştır. Bir tane Server.Roles metodu bize o server"da tanımlı olan tüm Server rollerini ServerRole nesnesi olarak döndürüyor. foreach (ServerRole sr in server.Roles){CblServerPermissions.Items.Add(sr.Name);} Tüm loginleri ve Server rollerini listeledikten sonra şimdi sıra geldi yeni bir senaryo üretip gerçeklemeye. Herhangi bir logine tıklanınca bu loginin dahil olduğu server rolü"nün seçilmesini ve Uygula buttonunun aktif hale gelmesini istiyorum. Bu işlemi gerçekleştirecek olan kodları aşağıda görüyorsunuz. protected void LbLogins_SelectedIndexChanged(object sender, EventArgs e) { ButtonUygula.Enabled = true; Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz... Microsoft.SqlServer.Management.Smo.Login login = new Microsoft.SqlServer.Management.Smo.Login(server, LbLogins.Items[LbLogins.SelectedIndex].ToString());//Öncelikle seçili olan logini tanımlıyorum..     for (int i = 0; i < CblServerPermissions.Items.Count; i++)//döngü server rollerinin sayısı kadar dönecek     {         CblServerPermissions.Items[i].Selected = false;//daha önceki seçimi temizlemek amacıyla seçimi false yapıyorum         if (login.IsMember(CblServerPermissions.Items[i].ToString()))//eğer ilgili login şu andaki role üye ise seçimi true yap         {                CblServerPermissions.Items[i].Selected = true;         }   } } Yukarıdaki kodlardan da anlaşılacağı üzere öncelikle login nesnemizi tanımlıyoruz. Daha sonra login nesnemizin bir özelliği olan IsMember metodunu kullanıyoruz bu metod içine bir tane rol ismi alır ve loginin o role üye olup olmadığını kontrol eder. Eğer login o role üye ise true değil ise false değeri döndürür. Şimdi sıra geldi seçimlere göre rolleri yeniden düzenlemeye. Uygula buttonuna basıldığında her role seçili olup olmamasına göre seçili olan login eklensin veya çıkartıldın. Bu işlem için Uygula buttonunun click event"ine yazdığım kodlarda aşağıda yer almakta... protected void ButtonUygula_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...     Microsoft.SqlServer.Management.Smo.Login login = new Microsoft.SqlServer.Management.Smo.Login(server, LbLogins.Items[LbLogins.SelectedIndex]    .ToString());     for (int i = 0; i < CblServerPermissions.Items.Count; i++)     {         if (CblServerPermissions.Items[i].Selected)         {             login.AddToRole(CblServerPermissions.Items[i].ToString());         }         else         {             ServerRole sr = server.Roles[CblServerPermissions.Items[i].ToString()];             sr.DropMember(login.Name);         }     } } Kodların çalışma mantığı oldukça basit. checkboxlisti tamamen tarıyor ve her maddeye göre ayrı ayrı işlem yapıyor.. Eğer seçildiyse login nesnesinin AddToRole metodu ile logini role ekliyor, seçilmedi ise ServerRole nesnesinin DropMember metodu ile logini o rolden siliyor. AddMemeber metodunu daha öce kullanmıştık ama DropMemeber metodunu ilk defa burada kullanıyoruz. DropMemeber metodu parametre olarak loginin ismini alarak işlem yapıyor ve az önce de belirttiğim gibi logini rolden çıkarıyor. Database"in Script"ini Üretmek Bu bölümde Database"in scriptini oluşturmak üzerinde duruyoruz. SQL Server Management Studio ile bunu herhangi bir Database"in üzerine sağ tıklayarak kolayca gerçekleyebiliyoruz bakalım SMO"yu kullanarak ta bu kadar kolay başarabilecekmiyiz. Bu işlem için projeme script.aspx adında bir tane sayfa ekliyorum. Sayfada bir tane button ve oldukça geniş bir tane textbox olacak. Buttona tıklanınca Burak isimli Database"in tablolarını oluşturacak SQL cümleleri karşıma getirecek. protected void ButtonScriptUret_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...     Database db = server.Databases["Burak"];     Microsoft.SqlServer.Management.Smo.Table [] tables=new Microsoft.SqlServer.Management.Smo.Table[db.Tables.Count];     db.Tables.CopyTo(tables, 0);     SqlSmoObject[] SmoObject = new SqlSmoObject[db.Tables.Count];     Array.Copy(tables, SmoObject, db.Tables.Count);     Scripter script = new Scripter(server);     StringCollection sc = script.Script(SmoObject);       foreach (string s in sc)     {         TextBox1.Text += s+" ";     } } Yukarıdaki kodları satır satır açıklamak istiyorum. Öncelikle her zaman olduğu gibi bir tane Server nesnesi oluşturduk, daha sonra Database nesnesi oluşturup serverdaki hangi Database"i kullanacağını bildirdik. Daha sonra SmoTable türünde büyüklüğü de Database"deki tablo sayısı kadar olan bir tane dizi oluşturduk. Bir alttaki satırda oluşturduğumuz diziye Database sınıfının içinde yer alan Table sınıfının CopyTo metodunu kullanarak Burak Database"i içinde bulunan tabloları diziye attık. CopyTo metodu iki parametre alarak çalışıyor bunlardan ilki tabloların kopyalanacağı dizi ve ikincisi de hangi tablodan başlanacağı. Tabloları diziye kopyaladıktan sonra SqlSmoObject türünde uzunluğu az önceki diziyle aynı başka bir dizi oluşturduk. Bu diziyi oluşturmamızın nedeni az sonra kullanacağımız Scripter nesnesinin script oluşturmak için parametre olarak SqlSmoObject türünde bir nesne alıyor olması. Oluşturduğumuz yeni diziye Array sınıfının Copy metodunu kullanarak tables"daki verileri attık. Bir alttaki satırda da Scripter türünde bir tane nesne tanımladık ve hemen altta da bu sınıfın bir üyesi olan Script metodu ile scripti oluşturup bir tane StringCollection nesnesine attık. Daha sonra StringCollection içindeki stringleri teker teker TextBox"a dolduruyoruz. Bu yöntemi kullanarak sadece tabloları değil Database"de bulunan diğer nesnelerin de scriptini oluşturabiliriz yapmamız gereken tek şey tablo yerine başka bir nesneyi belirleyip SqlSmoObject türünden diziye bu nesneleri doldurmak. Back Up ve Restore Bu bölümde SMO ile Back up ve Restore işlemlerini nasıl yaptığımızı anlatıyor olacağım. Sözü fazla uzatmadan hemen örneklere başlamak istiyorum, öncelikle Burak Database"inin yedeğini alalım ve daha sonra bu yedeği yeniden yükleyelim.Bu işlemler için projeme BackUpRestore.aspx adında bir tane sayfa ekliyorum. Sayfada iki adet button bulunacak biri back up diğeri restore işlemi için. Biz öncelikle BackUp buttonuna basıyoruz... protected void ButtonBackUp_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...     BackupDeviceItem DeviceItem = new BackupDeviceItem("Burak.bak", DeviceType.File);       Backup NewBackUp = new Backup();     NewBackUp.Database = "Burak";     NewBackUp.Devices.Add(DeviceItem);     NewBackUp.Initialize = true;     NewBackUp.SqlBackup(server); } İşe her zaman olduğu gibi server nesnemizi tanımlayarak başladık. Hemen ardından bir tane BackupDeviceItem nesnesi tanımladık. Yedeğin adı Burak.bak olarak belirlendi ve tipide dosya olarak ayarlandı. Bir altta back up işlemini gerçekleştirecek Backup nesnemizi tanımlıyoruz ve alt satırlarda bu nesnenin özelliklerini bildiriyoruz. Hangi Database"in yedeğinin alınacağını Database metodu ile bildiriyoruz. Bir alt satırda ise backup alınacak aygıt ekleniyor. Hatırlarsanız bu aygıtı daha önce tanımlamıştık. Initialize özelliğini de true yaparak backup aygıtını backup tanımlanırken bildirdiğimiz belirtiyoruz. En alt satırda da SqlBackup metodu ile backup oluşturulup sabit diskimize kayıt ediliyor peki nereye? Dikkat ederseniz tüm ayarlarımız default backup için herhangi bir yer belirtmedik bu sebeple Burak.bak dosyası da C:Program FilesMicrosoft SQL ServerMSSQL.2MSSQLBackup dizini içerisinde oluştu. Bu işlemi ASP.NET üzerinden yaptığımızı hatırlayacak olursak bu backup"ı projenin bulunduğu bir klasör içinde oluşturmak daha mantıklı olacaktır diye düşünmekteyim bunun için projeme Backups adında bir tane klasör ekliyorum ve kodları da biraz değiştirerek backup"ın bu klasör içine kayıt edilmesini sağlayacağım. Kodlarda sadece BackupDeviceItem"ın tanımlandığı satırı değiştirerek yedeğin yeni oluşturduğum Backups klasörüne konulmasını sağladım. BackupDeviceItem DeviceItem = new BackupDeviceItem(Server.MapPath(@"Backups/Burak.bak"), DeviceType.File); Backup aldığımıza göre şimdi sıra geldi bu backup"ı resote etmeye. Restore buttonuna tıklanınca çalışacak kodları da aşağıda görüyorsunuz... protected void ButtonRestore_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...     BackupDeviceItem DeviceItem = new BackupDeviceItem(Server.MapPath(@"Backups/Burak.bak"), DeviceType.File);     Restore restore = new Restore();     restore.Database = "Burak";     restore.ReplaceDatabase = true;     restore.Devices.Add(DeviceItem);     restore.SqlRestore(server); } Tıpkı Backup"ta olduğu gibi server nesnemizi ve DeviceItem nesnemizi oluşturarak işe başlıyoruz. Bu sefer tahmin edeceğiniz gibi Backup değil Restore nesnesi oluşturuyoruz ve Backup"a benzer şekilde Database adını, database"i replace yapıp yapmayacağını ve kullanacağı DeviceItem"ı belirtip SqlRestore metodunu çalıştırarak bu işlemi gerçekliyoruz... Veri Transferi Smo ile tıpkı Management Studio"da olduğu gibi verileri transfer edebiliyoruz. Projemize bu işlem için TransferData.aspx adında bir tane sayfa ekleyelim ve içine bir tane listbox, bir tane textbox ve bir tane de button koyalım. Yapacağımız işlem çok mantıklı değil ama en azından bu bölümü anlamak açısından uygun.  Listboxta listelenen Database"lerden biri seçilecek ve buttona basıldığında textbox"ın içine yazdığımız değer adında bir tane Database oluşturup seçilen Database içindeki verileri yeni Database"e kopyalanacak. Buttona basılınca çalıştırılacak kodları aşağıda görüyorsunuz.. protected void ButtonTransfer_Click(object sender, EventArgs e) {     Server server = new Server(@"BBAS-MOBILESQL2005");//Server nesnesini tanımlıyoruz...     Database db = server.Databases[LbSourceDbs.Items[LbSourceDbs.SelectedIndex].ToString()];       //Yeni Db olusturuluyor...     Database NewDataBase = new Database(server, TbTargetDb.Text);     NewDataBase.Create();     //Transfer tanimlaniyor...     Transfer t = new Transfer(db);       //transferin ozellikleri ayarlaniyor     t.CopyAllTables = true;     t.Options.WithDependencies = true;     t.DestinationServer = server.Name;     t.DestinationDatabase = TbTargetDb.Text;     t.CopySchema = true;     t.CopyData = true;     //transfer baslatiliyor...     t.TransferData(); } Kodların başında bulunan yeni Database oluşturma"yı bir önceki makalemde açıklamıştım. Verileri transfer etmek için bir tane Transfer nesnesi oluşturuyoruz. Daha sonra transfer için ayarlanması gereken özellikleri ayarlayıp TransferData(); metodunu çalıştırdığımızda veriler kaynak Database"den hedef Database"e kopyalanıyor. Burada dikkat etmemiz gereken nokta kaynak Database"in transfer nesnesini tanımlarken parametre olarak gönderildiğidir. Bu makalede SQL Server"ın yönetimi ile ilgili kodları anlatmaya çalıştım bir sonraki yani bu serinin son makalesinde de SQL Server"ı kontrol eden servislerin SMO ile yönetilişini anlatmaya çalışacağım..  

Döküman Arama

Başlık :

Kapat