• C# ASP.NET利用SQLDMO备份和还原数据库


            SQLDMOMicrosoft SQL Server自带的SQLDMO.dll提供,由于SQLDMO.dll是一个COM对象,SQLDMO(SQL Distributed Management ObjectsSQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMOMicrosoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复。

           本文要实现如下界面和对应功能:

     页面核心代码如下:

    <div class="content-wrap">

                          <div class="row">

                            <div class="col-sm-12">

                              

                                 <div class="nest" id="tabClose">

                                    <div  class="body-nest">

                                    <%--   内容样式开始   --%>

                                        <div id="divMsg" runat="server" style="color:Red;">div>

                                           <asp:Panel ID="Panel1" runat="server">

                                                      <asp:TextBox ID="txtPath" runat="server" Width="297" CssClass="path"  ForeColor="Black" >asp:TextBox>

                                                  <span style="color:Red;">例:C:/DBBack/span>

                                            asp:Panel>

                                        <asp:Button ID="btn_backup" runat="server" Text="备份数据库" OnClick="btn_backup_Click" />

                                        <div>还原数据库时请关闭所有和该数据库连接的程序!div>

                                          <asp:RadioButton ID="sysDirectory" runat="server" Text="系统目录" Checked="True"

                                                GroupName="aa" οnclick="selectRadioButton()" />

                                                   

                                            <asp:RadioButton ID="otherDirectory" runat="server" Text="其他目录"

                                                GroupName="aa" οnclick="selectRadioButton()" />

                                         <div class="tdControl" style="text-align:left; width:200px;">系统目录文件:div>

                                            <div   class="tdControl">

                                                <asp:Panel ID="Panel2" runat="server">

                                                    <asp:ListBox ID="DBList" runat="server" Width="285px" Height="108px">asp:ListBox>

                                                asp:Panel>

                                            div>

                                        <div class="tdControl" style="text-align:left; width:200px;">选择其他目录文件:div>

                                        <div  class="tdControl">

                                            <asp:FileUpload ID="FileUpload1" runat="server" Width="368px" />

                                        div>

                                        <div style="margin:10px;">

                                            <asp:Button ID="btn_restore" runat="server" Text="恢复数据库" OnClick="btn_restore_Click" />

                                        div>                                    

                                        div>

                                     div>

                                div>

                              div>

                            div>

    在用SQLDMO.dll之前必须在.NET项目中添加对它的引用,如下图所示

    注意:一定要安装完整的SQLDMO.dll文件,单个该文件会出错,错误见文章最下面。如果默认没有安装的话,要下载SQLDMO完整文件,然后拷贝到C:\Program Files\Microsoft SQL Server\80\Tools\Binn\。

    引用正确后,后台加入如下代码:

    ///

      /// 数据库备份

      ///

      public static void DbBackup()

      {

           SQLDMO.Backup oBackup = new SQLDMO.BackupClass();

           SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();

           try

           {

            oSQLServer.LoginSecure = false;

             oSQLServer.Connect(".\\SqlExpress", "sa", "123456");

            oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

            oBackup.Database = "DutySys";

            oBackup.Files = @"d:/DutySys.bak";

            oBackup.BackupSetName = "DutySys";

            oBackup.BackupSetDescription = "数据库备份";

            oBackup.Initialize = true;

            oBackup.SQLBackup(oSQLServer);

           }

           catch

           {

            throw;

           }

           finally

           {

            oSQLServer.DisConnect();

           }

      }

         ///

      /// 数据库恢复

      ///

      public static void DbRestore()

      {

           SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();

           SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();

           try

           {

            oSQLServer.LoginSecure = false;

            oSQLServer.Connect(".\\SqlExpress", "sa", "123456");

            oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

            oRestore.Database = "DutySys";

            oRestore.Files = @"d:/DutySys.bak";

            oRestore.FileNumber = 1;

            oRestore.ReplaceDatabase = true;

            oRestore.SQLRestore(oSQLServer);

              

           }

           catch

           {

            throw;

           }

           finally

           {

            oSQLServer.DisConnect();

           }

      }

    在两个页面按钮下调用这两个方法就行:

    protected void btn_backup_Click(object sender, EventArgs e)

      {

          DbBackup();

      }

    protected void btn_restore_Click(object sender, EventArgs e)

      {

          DbRestore();

      }

    通过上面简单的代码就实现了数据库的备份和还原。亲测无误。

    还有一种将SQLDMO封装道BLL一个类里面,使用Web.config里面统一的数据库连接字符串,前台直接调用即可。

     这些已调试好的都包含到源码里,可以下载自行查看。

    过程中遇到的几个错误:

    1、提示:检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,原因是出现以下错误: 80040154如何处理。

    方法:

    这是没有完整安装该SQLDMOD.DLL文件造成的。

    第一步:下载SQLDMOD.DLL.zip(在我的源码中有)后解压,将里面包含的所有msvcr71.dll, SQLDMO.DLL, Resources文件夹整体拷贝到C:\Program Files\Microsoft SQL Server\80\Tools\Binn目录。

     第二步:打开CMD输入 regsvr32 " C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll" 注册sqldmo.dll。

     regsvr32 "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\

    SQLDMO.dll"

    2.提示"[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝 [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). QODBC3: Unable to connect"。

              一般是数据库没有配置好,先确认使用sa或其他用户名可以登录;然后就是代码中的  oSQLServer.Connect(".\\SqlExpress", "sa", "123456");第一个参数服务器".\\SqlExpress"没有配置正确。可以尝试(local)或者127.0.0.1。

        

    3.当调试到Server.MapPath时,提示:未能映射路径"/"

    是因为需要~符号。比如"~/"或者"~/DBBackUp/"。

    资源下载地址:SQLDMO.dll完整包和源码DEMO

  • 相关阅读:
    [思维]Knowledge Cards Codeforces1740D
    俄罗斯、乌克兰程序员薪资曝光!年薪 15w+,女程序员比男程序员收入高
    【MyBatis笔记05】MyBatis中常见的几种查询结果类型介绍
    24 Network Requests and Remote Resources
    高可用集群 keepalived
    Windows自动化重启python脚本
    NTB0101GS1Z 电压电平 移位器 产品概述 特性
    微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习
    【python基础】模块和包
    微机原理_14
  • 原文地址:https://blog.csdn.net/lanhai96/article/details/126150581