Asp.net实现数据库的备份


为了保证用户数据的安全性,避免计算机在操作过程中出现意外,以及种种原因而引发的数据的丢失,应对数据库及时进行备份。以便日后能够对相关数据进行恢复,减少由于意外而造成的损失。 1.方案分析

  备份主要是对SQL Server数据库或事务日志进行拷贝,数据库备份记录了在进行备份这一操作时数据库中所有数据的状态。在SQL Server中提供了BACKUP DATABASE语句用于实现备份数据库。数据库的备份主要是对数据库的完全备份,包括所有的数据以及数据库对象。

  说明:由于是对数据库的完全备份,所以这种备份类型不仅速度较慢,而且将占用大量磁盘空间,正因为如此,在进行数据库备份时常将其安排在晚间,因为此时整个数据库系统几乎不进行其他事务操作,从而可以提高数据库备份的速度。

  在对数据库进行完全备份时,所有未完成的事务或者发生在备份过程中的事务,都不会被备份。通常情况下,可以一边进行备份一边进行其他操作,但是,在备份过程中不允许执行以下操作

  l     创建或删除数据库文件。

  l     创建索引。

  l     执行非日志操作。

  l     自动或手工缩小数据库或数据库文件大小。

  如果以上各种操作正在进行当中且准备进行备份,则备份处理将被终止。如果在备份中打算执行以上任何操作,则操作失败,而备份继续进行。

  本实例应用了两个技术要点:应用SQL存储过程查找企业管理器中所有数据库和bcp实用工具。

  l     应用SQL存储过程查找企业管理器中所有数据库

  为了使软件更加智能化,利用SQL中自带的存储过程查找管理器中所有数据表,并将数据填充到下拉列表框中,主要用到的存储过程是sp_helpdb。下面介绍sp_helpdb的语法结构和用法
sp_helpdb:报告有关指定数据库或所有数据库的信息。

  语法:

  sp_helpdb[[@dbname=]’name’]

  参数:

  [@dbname=]’name’:是要为其提供信息的数据库名称。Name的数据类型为sysname,无默认值。如果没有指定name,则sp_helpdb报告master.dbo.systdatabases中的所有数据库。

  权限:执行默认授予public角色。

  sp_helpdb必须访问服务器上的数据库以确定要显示的有关数据库的信息。因此,服务器上的每个数据库都必须满足下列条件之一。

  2     执行sp_helpdb的用户必须拥有访问数据库的权限。

  2     guest用户帐号必须处于数据库中。

  如果无法访问数据库,那么sp_helpdb将显示错误信息15622和有关数据库信息。示例代码:

  返回有关某一个数据库的信息。

  Exec sp_helpdb pubs

  返回所有数据库信息

  Exec sp_helpdb

  l     bcp实用工具。

  bcp实用工具用于SQL Server2000实例和数据文件之间指定的格式复制数据。以下介绍bcp实用工具中几个重要的参数说明。

  2     In|out|queryout|format:指定大容量复制的方向。In是从文件复制到数据库表或视图,out是指从数据库表或视图复制到文件。

  2     -c:使用字符数据类型执行大容量复制操作。

  2     -q:在bcp实用工具和SQL Server实例的连接中执行SET QUOTED_IDENTIFLERSON语句。

  2     -S server_name[/instance_name]:指定要连接到的SQL Server实例。

  2     -U login_id:指定用于连接到的SQL Server实例。

  2     -P password:指定登录ID的密码
以下代码为本实例即备份数据表实例中应用的代码。

cmdtxt2+="out"+this.txtPath.Text.Trim()+".xls-c-q-S.-Usa-P"+this.txtPwd.Text.Trim()+"'";

  该语句主要应用了bcp实用工具中几个重要的参数,读者可根据以上内容的介绍来进一步理解上述代码的意义。 2.实施过程

  实例主要应用BACKUP DATABASE语句备份数据库到指定磁盘的文件中。

  具体实施过程:

  (1)新建一个网站,将其命名为20,默认主页为Index.aspx。

  (2)在Index.aspx页添加1个DropDownList控件,1个TextBox控件和1个Button控件,用于选择要备份的数据库、输入备份数据库的新名称和路径和执行备份操作。

  (3)主要程序代码。

  在Page_Load事件中,根据条件从数据库中检索出相应的数据,并将结果集中的数据填充到DropDownList中,代码如下。

protectedvoidPage_Load(objectsender,EventArgse)
  {
    if(!IsPostBack)
    {
      stringcmdtxt1="Server=(local);DataBase=master;Uid=sa;Pwd=";
      stringcmdtxt2="Execsp_helpdb";
      SqlConnectionCon=newSqlConnection(cmdtxt1);
      Con.Open();
      SqlCommandmycommand=newSqlCommand(cmdtxt2,Con);
      SqlDataReaderdr=mycommand.ExecuteReader();
      this.dropSqlName.DataSource=dr;
      this.dropSqlName.DataTextField="name";
      this.dropSqlName.DataBind();
      dr.Close();
      Con.Close();
   }
}  

  双击【备份数据库】按钮触发该按钮的Click事件,在该事件中执行数据库备份操作,代码如下。
 protectedvoidbtnBackup_Click(objectsender,EventArgse)
  {
    stringcmdtxt1="Server=(local);database='"+this.
dropSqlName.SelectedValue+"';Uid=sa;Pwd=";
    //定义备数据库的T-SQL命令的字符串
    stringcmdtxt2="backupdatabase"+this.dropSqlName.SelectedValue+"todisk
='"+this.TextBox1.Text.Trim()+".bak'";
    SqlConnectionCon=newSqlConnection(cmdtxt1);
    Con.Open();
    try
    {
      if(File.Exists(this.TextBox1.Text.Trim()))
      {
        Response.Write("<scriptlanguage=javascript>alert
('此文件已存在,请从新输入!');location='Index.aspx'</script>");
        return;
      }
      SqlCommandCom=newSqlCommand(cmdtxt2,Con);
      Com.ExecuteNonQuery();
      Response.Write("<scriptlanguage=javascript>alert('备份数据成功!');location
='Index.aspx'</script>");
    }
    catch(Exceptionms)
    {
      Response.Write(ms.Message);
      Response.Write("<scriptlanguage=javascript>alert('备份数据失败!')
</script>");
    }
    finally
    {
      Con.Close();
    }
  }

  注意:此代码需要引用System.Data.SqlClient和System.IO命名空间


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3