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()" />

                                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

                                        <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\。

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

/// <summary>

  /// 数据库备份

  /// </summary>

  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();

       }

  }

     /// <summary>

  /// 数据库恢复

  /// </summary>

  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanhai96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值