Na nekoliko foruma pisao sam oko manipulacije bazom podataka u MS SQL. Tematika je bila kako iz klijent aplikacije manipulisati sa bazom podataka, prvenstveno prilikom arhiviranja i restauracije. Tehnologiju koji Microsoft preporuča, a tiče se manipulacije bazom podataka u .NET programskim jezicima je SMO (SQL Management Objects). Ova tehnologija je nova, jer je uvedena pojavom MS SQL Servera 2005. Prijašnje tehnologije koje su bile zastupljenje u SQL Serveru 2000 ticala se alata koji su bili razvijani na COM tehnologiji.
Jedan od najčešće postavljanih pitanja je kako iz klijent aplikacije izvršiti backup baze podataka. A poslije tog pitanja slijed a kako stvoreni backup vratiti na SQL server.
U daljenjm tekstu prikazane su dvije metode koje vrše backup i restore baze podataka. Prije korištenja ovih metoda dobro je malo se upoznati sa SMO tehnologijom.
Implementacija
using System.Data.SqlClient; using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Smo; using System.Collections.Specialized;</code> // Backup baze podataka. public static void BackupDatabase(string strConnString, string backUpName, string backUpPath, DateTime datumIsteka) { try { string dbName; using (SqlConnection cnn = new SqlConnection(strConnString)) { cnn.Open(); dbName = cnn.Database.ToString(); //Konekcija na server ServerConnection sc = new ServerConnection(cnn); Server sv = new Server(sc); // Formiranje uredjaja BackupDeviceItem bdi = new BackupDeviceItem(backUpPath+"\\" + backUpName+".bak", DeviceType.File); // Forimiranje informacija o backupu Backup bk = new Backup(); bk.Devices.Add(bdi); bk.Action = BackupActionType.Database; bk.BackupSetDescription = "SQL Express backuping..!"; bk.BackupSetName = backUpName; bk.Database = dbName; bk.ExpirationDate = datumIsteka; bk.LogTruncation = BackupTruncateLogType.Truncate; // Pokreni backup bk.SqlBackup(sv); System.Windows.Forms.MessageBox.Show("BackUp je uspješno izveden!"); } } catch (System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } } // Restauracija backupa public static void RestoreBackup(string strConnString,string restorePathWithFileName) { try { string dbName; using (SqlConnection cnn = new SqlConnection(strConnString)) { cnn.Open(); dbName = cnn.Database.ToString(); cnn.ChangeDatabase("master"); ServerConnection sc = new ServerConnection(cnn); Server sv = new Server(sc); BackupDeviceItem bdi = new BackupDeviceItem(restorePathWithFileName, DeviceType.File); // formiranje restor objekta Restore resDB = new Restore(); resDB.Devices.Add(bdi); resDB.NoRecovery = false; resDB.ReplaceDatabase = true; resDB.Database = dbName; // restauracija baze resDB.SqlRestore(sv); System.Windows.Forms.MessageBox.Show("Restauracija je uspješno izvedena!"); } } catch (System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } }