備份和還原SQL Server及壓縮Access資料庫

来源:http://www.cnblogs.com/aspnetjia/archive/2016/01/20/5144039.html
-Advertisement-
Play Games

功能說明:備份和恢復SQL Server資料庫* 作者: 劉功勛;* 版本:V0.1(C#2.0);時間:2007-1-1* 當使用SQL Server時,請引用 COM組件中的,SQLDMO.dll組件* 當使用Access中,請瀏覽添加引用以下兩個dll* 引用C:/Program Files/...


 功能說明:備份和恢復SQL Server資料庫
 * 作者: 劉功勛;
 * 版本:V0.1(C#2.0);時間:2007-1-1
 * 當使用SQL Server時,請引用 COM組件中的,SQLDMO.dll組件 
 * 當使用Access中,請瀏覽添加引用以下兩個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;//該命名空間包含創建ACCESS的類(方法)--解決方案 ==> 引用 ==> 添加引用 ==> 游覽找到.dll
using JRO;//該命名空間包含壓縮ACCESS的類(方法)

namespace EC
{
    /// <summary>
    /// 資料庫恢復和備份
    /// </summary>
    public class SqlBackObject
    {
        public SqlBackObject()
        {
            //
            // TODO: 在此處添加構造函數邏輯
            //
        }

        #region SQL資料庫備份
       /// <summary>
        /// SQL資料庫備份
       /// </summary>
       /// <param name="ServerIP">SQL伺服器IP或(Localhost)</param>
       /// <param name="LoginName">資料庫登錄名</param>
       /// <param name="LoginPass">資料庫登錄密碼</param>
       /// <param name="DBName">資料庫名</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 = "資料庫備份";
                oBackup.Initialize = true;
                oBackup.SQLBackup(oSQLServer);

            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }
            finally
            {
                oSQLServer.DisConnect();
            }
        }
        #endregion

        #region SQL恢複數據庫
        /// <summary>
        /// SQL恢複數據庫
        /// </summary>
        /// <param name="ServerIP">SQL伺服器IP或(Localhost)</param>
        /// <param name="LoginName">資料庫登錄名</param>
        /// <param name="LoginPass">資料庫登錄密碼</param>
        /// <param name="DBName">要還原的資料庫名</param>
        /// <param name="BackPath">資料庫備份的路徑</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 根據指定的文件名稱創建Access資料庫
        /// <summary>
        /// 根據指定的文件名稱創建數據
        /// </summary>
        /// <param name="DBPath">絕對路徑+文件名稱</param>
        public static void CreateAccess(string DBPath)
        {
            if (File.Exists(DBPath))//檢查資料庫是否已存在
            {
                throw new Exception("目標資料庫已存在,無法創建");
            }           
            DBPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DBPath;
            //創建一個CatalogClass對象實例
            ADOX.CatalogClass cat = new ADOX.CatalogClass();
            //使用CatalogClass對象的Create方法創建ACCESS資料庫
            cat.Create(DBPath);

        }
        #endregion

        #region 壓縮Access資料庫
        /// <summary>
        /// 壓縮Access資料庫
        /// </summary>
        /// <param name="DBPath">資料庫絕對路徑</param>
        public static void CompactAccess(string DBPath)
        {
            if (!File.Exists(DBPath))
            {
                throw new Exception("目標資料庫不存在,無法壓縮");
            }
           
            //聲明臨時資料庫名稱
            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;
            //定義臨時資料庫的連接字元串
            string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+temp;
            //定義目標資料庫的連接字元串
            string DBPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DBPath;
            //創建一個JetEngineClass對象的實例
            JRO.JetEngineClass jt = new JRO.JetEngineClass();
            //使用JetEngineClass對象的CompactDatabase方法壓縮修複資料庫
            jt.CompactDatabase(DBPath2, temp2);
            //拷貝臨時資料庫到目標資料庫(覆蓋)
            File.Copy(temp, DBPath, true);
            //最後刪除臨時資料庫
            File.Delete(temp);
        }
        #endregion

        #region 備份Access資料庫
        /// <summary>
        /// 備份Access資料庫
        /// </summary>
        /// <param name="srcPath">要備份的資料庫絕對路徑</param>
        /// <param name="aimPath">備份到的資料庫絕對路徑</param>
        /// <returns></returns>
        public static void Backup(string srcPath,string aimPath)
        {
            
            if (!File.Exists(srcPath))
            {
                throw new Exception("源資料庫不存在,無法備份");
            }
            try
            { 
                File.Copy(srcPath,aimPath,true);
            }
            catch(IOException ixp)
            {
                throw new Exception(ixp.ToString());
            }
            
        }

        #endregion

        #region 還原Access資料庫
        /// <summary>
        /// 還原Access資料庫
        /// </summary>
        /// <param name="bakPath">備份的資料庫絕對路徑</param>
        /// <param name="dbPath">要還原的資料庫絕對路徑</param>
        public static void RecoverAccess(string bakPath,string dbPath)
        {           
            if (!File.Exists(bakPath))
            {
                throw new Exception("備份資料庫不存在,無法還原");
            }
            try
            {
                File.Copy(bakPath, dbPath, true);
            }
            catch (IOException ixp)
            {
                throw new Exception(ixp.ToString());
            }        
        }        
        #endregion
    }
}

轉載自:http://www.aspnetjia.com/Cont-45.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • NSAttributedString的使用 使label具有點擊事件 定義帶參數巨集的註意事項 pch文件基本使用規則 使用CocoaPods集成Masonry框架 Xcode7中VVDocument插件解決方案
  • 參考:http://www.cnblogs.com/hubli/p/4835549.html效果圖:1.wevbview_progressbar.xml ...
  • 主要用於UITableView和UICollectionView,也可以用於UIScrollView,其實主要是前兩個會用到空白或者網路出錯頁 採用給UIScrollView添加代理方法來給頁面添加空白頁,源碼很有學習意義
  • 文章內容大綱1、NSMutableAttributedString的基本使用2、NSMutableAttributedString的簡易封裝3、使用開源代碼GOBMarkupPaser處理富文本4、UITextKit簡介5、編程思想的相關思考前言富文本使用案例:這裡我自己也用了富文本實現了簡單的卻也...
  • 一、沙盒(SandBox) 1.沙盒機制 1> 每個應用都有屬於自己的存儲空間,即沙盒。 2> 應用只能訪問自己的沙盒,不可訪問其他區域。 3> 如果應用需要進行文件操作,則必須將文件存放在沙盒中,尤其是資料庫文件,在電腦上操作時,可以去訪問,但是如果要裝在真機上可以使用,必須將資料庫文件...
  • 最近有學生做畢業設計,想使用懸浮窗這種效果,其實很簡單,我們可以通過系統服務WindowManager來實現此功能,本章我們來試驗一下在當前Activity之上創建一個懸浮的view。第一步:認識WindowManagerl 這個介面用於與 window manager (視窗管理器, 應用框架.....
  • 使用Microsoft SQL SERVER 2014 Management Studio訪問Azure SQL Database時,查看存儲過程時遇到下麵錯誤信息: TITLE: Microsoft SQL Server Management Studio --------------------...
  • 在SQL標準中定義了四種隔離級別,每一種級別都規定了一個事務中所做的修改,哪些是在事務內和事務間可見的,哪些是不可見的。較低級別的隔離通常可以執行更高的併發,系統的開銷也更低。1、未提交讀(Read uncommitted)在未提交讀級別,事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...