/********************************************************************************** * * 功能說明:備份和恢復(fù)SQL Server數(shù)據(jù)庫(kù) * 作者: 劉功勛; * 版本:V0.1(C#2.0);時(shí)間:2007-1-1 * 當(dāng)使用SQL Server時(shí),請(qǐng)引用 COM組件中的,SQLDMO.dll組件 * 當(dāng)使用Access中,請(qǐng)瀏覽添加引用以下兩個(gè)dll * 引用C:\Program Files\Common Files\System\ado\msadox.dll,該DLL包含ADOX命名空間 * 引用C:\Program Files\Common Files\System\ado\msjro.dll,該DLL包含JRO命名空間 * *******************************************************************************/ using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.IO; using ADOX;//該命名空間包含創(chuàng)建ACCESS的類(方法)--解決方案 ==> 引用 ==> 添加引用 ==> 游覽找到.dll using JRO;//該命名空間包含壓縮ACCESS的類(方法) namespace EC { /// <summary> /// 數(shù)據(jù)庫(kù)恢復(fù)和備份 /// </summary> public class SqlBackObject { public SqlBackObject() { // // TODO: 在此處添加構(gòu)造函數(shù)邏輯 // } #region SQL數(shù)據(jù)庫(kù)備份 /// <summary> /// SQL數(shù)據(jù)庫(kù)備份 /// </summary> /// <param name="ServerIP">SQL服務(wù)器IP或(Localhost)</param> /// <param name="LoginName">數(shù)據(jù)庫(kù)登錄名</param> /// <param name="LoginPass">數(shù)據(jù)庫(kù)登錄密碼</param> /// <param name="DBName">數(shù)據(jù)庫(kù)名</param> /// <param name="BackPath">備份到的路徑</param> public static void SQLBACK(string ServerIP,string LoginName,string LoginPass,string DBName,string BackPath) { SQLDMO.Backup oBackup = new SQLDMO.BackupClass(); SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass(); try { oSQLServer.LoginSecure = false; oSQLServer.Connect(ServerIP, LoginName, LoginPass); oBackup.Database = DBName; oBackup.Files = BackPath; oBackup.BackupSetName = DBName; oBackup.BackupSetDescription = "數(shù)據(jù)庫(kù)備份"; oBackup.Initialize = true; oBackup.SQLBackup(oSQLServer); } catch (Exception e) { throw new Exception(e.ToString()); } finally { oSQLServer.DisConnect(); } } #endregion #region SQL恢復(fù)數(shù)據(jù)庫(kù) /// <summary> /// SQL恢復(fù)數(shù)據(jù)庫(kù) /// </summary> /// <param name="ServerIP">SQL服務(wù)器IP或(Localhost)</param> /// <param name="LoginName">數(shù)據(jù)庫(kù)登錄名</param> /// <param name="LoginPass">數(shù)據(jù)庫(kù)登錄密碼</param> /// <param name="DBName">要還原的數(shù)據(jù)庫(kù)名</param> /// <param name="BackPath">數(shù)據(jù)庫(kù)備份的路徑</param> public static void SQLDbRestore(string ServerIP,string LoginName,string LoginPass,string DBName,string BackPath) { SQLDMO.Restore orestore = new SQLDMO.RestoreClass(); SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass(); try { oSQLServer.LoginSecure = false; oSQLServer.Connect(ServerIP, LoginName, LoginPass); orestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database; orestore.Database = DBName; orestore.Files = BackPath; orestore.FileNumber = 1; orestore.ReplaceDatabase = true; orestore.SQLRestore(oSQLServer); } catch (Exception e) { throw new Exception(e.ToString()); } finally { oSQLServer.DisConnect(); } } #endregion #region 根據(jù)指定的文件名稱創(chuàng)建Access數(shù)據(jù)庫(kù) /// <summary> /// 根據(jù)指定的文件名稱創(chuàng)建數(shù)據(jù) /// </summary> /// <param name="DBPath">絕對(duì)路徑+文件名稱</param> public static void CreateAccess(string DBPath) { if (File.Exists(DBPath))//檢查數(shù)據(jù)庫(kù)是否已存在 { throw new Exception("目標(biāo)數(shù)據(jù)庫(kù)已存在,無法創(chuàng)建"); } DBPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DBPath; //創(chuàng)建一個(gè)CatalogClass對(duì)象實(shí)例 ADOX.CatalogClass cat = new ADOX.CatalogClass(); //使用CatalogClass對(duì)象的Create方法創(chuàng)建ACCESS數(shù)據(jù)庫(kù) cat.Create(DBPath); } #endregion #region 壓縮Access數(shù)據(jù)庫(kù) /// <summary> /// 壓縮Access數(shù)據(jù)庫(kù) /// </summary> /// <param name="DBPath">數(shù)據(jù)庫(kù)絕對(duì)路徑</param> public static void CompactAccess(string DBPath) { if (!File.Exists(DBPath)) { throw new Exception("目標(biāo)數(shù)據(jù)庫(kù)不存在,無法壓縮"); } //聲明臨時(shí)數(shù)據(jù)庫(kù)名稱 string temp = DateTime.Now.Year.ToString(); temp += DateTime.Now.Month.ToString(); temp += DateTime.Now.Day.ToString(); temp += DateTime.Now.Hour.ToString(); temp += DateTime.Now.Minute.ToString(); temp += DateTime.Now.Second.ToString() + ".bak"; temp = DBPath.Substring(0, DBPath.LastIndexOf("\\") + 1) + temp; //定義臨時(shí)數(shù)據(jù)庫(kù)的連接字符串 string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+temp; //定義目標(biāo)數(shù)據(jù)庫(kù)的連接字符串 string DBPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DBPath; //創(chuàng)建一個(gè)JetEngineClass對(duì)象的實(shí)例 JRO.JetEngineClass jt = new JRO.JetEngineClass(); //使用JetEngineClass對(duì)象的CompactDatabase方法壓縮修復(fù)數(shù)據(jù)庫(kù) jt.CompactDatabase(DBPath2, temp2); //拷貝臨時(shí)數(shù)據(jù)庫(kù)到目標(biāo)數(shù)據(jù)庫(kù)(覆蓋) File.Copy(temp, DBPath, true); //最后刪除臨時(shí)數(shù)據(jù)庫(kù) File.Delete(temp); } #endregion #region 備份Access數(shù)據(jù)庫(kù) /// <summary> /// 備份Access數(shù)據(jù)庫(kù) /// </summary> /// <param name="srcPath">要備份的數(shù)據(jù)庫(kù)絕對(duì)路徑</param> /// <param name="aimPath">備份到的數(shù)據(jù)庫(kù)絕對(duì)路徑</param> /// <returns></returns> public static void Backup(string srcPath,string aimPath) { if (!File.Exists(srcPath)) { throw new Exception("源數(shù)據(jù)庫(kù)不存在,無法備份"); } try { File.Copy(srcPath,aimPath,true); } catch(IOException ixp) { throw new Exception(ixp.ToString()); } } #endregion #region 還原Access數(shù)據(jù)庫(kù) /// <summary> /// 還原Access數(shù)據(jù)庫(kù) /// </summary> /// <param name="bakPath">備份的數(shù)據(jù)庫(kù)絕對(duì)路徑</param> /// <param name="dbPath">要還原的數(shù)據(jù)庫(kù)絕對(duì)路徑</param> public static void RecoverAccess(string bakPath,string dbPath) { if (!File.Exists(bakPath)) { throw new Exception("備份數(shù)據(jù)庫(kù)不存在,無法還原"); } try { File.Copy(bakPath, dbPath, true); } catch (IOException ixp) { throw new Exception(ixp.ToString()); } } #endregion } } |
|