在C#中,如何实现数据库备份和数据恢复呢?
在C#中,如何实现数据库备份和数据恢复呢?
//数据备份菜单点击事件
private void mnuBackUp_Click(object sender, System.EventArgs e)
{
frmBackUp back=new frmBackUp(frmBackUp.SetType.BackUp);
back.Show();
//调用dll
BackUpAndReinstate.BackUp backup=new BackUpAndReinstate.BackUp(Application.StartupPath+"\\BackUp\\TeachingBusiness.bak");
string message=backup.DataBaseBackUp();
MessageBox.Show(message,"消息",MessageBoxButtons.OK,MessageBoxIcon.Information);
back.Close();
}
//数据恢复菜单点击事件
private void mnuReinstate_Click(object sender, System.EventArgs e)
{
frmBackUp back=new frmBackUp(frmBackUp.SetType.Reinstate);
back.Show();
//调用dll
BackUpAndReinstate.Reinstate reinstate=new BackUpAndReinstate.Reinstate();
string message=reinstate.DataBaseReinstate();
MessageBox.Show(message,"消息",MessageBoxButtons.OK,MessageBoxIcon.Information);
back.Close();
}
frmBackUp窗体代码:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace 教务系统
{
/// <summary>
/// frmBackUp 的摘要说明。
/// </summary>
public class frmBackUp : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Timer timer1;
private System.ComponentModel.IContainer components;
public enum SetType
{
BackUp,
Reinstate
}
private int type=0;
public frmBackUp(SetType settype)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.type=(int)settype;
//
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmBackUp));
this.label1 = new System.Windows.Forms.Label();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// label1
//
this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label1.Location = new System.Drawing.Point(8, 8);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(256, 64);
this.label1.TabIndex = 0;
this.label1.Text = "正在备份数据,请稍侯......";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(24, 16);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(64, 48);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBox1.TabIndex = 1;
this.pictureBox1.TabStop = false;
//
// timer1
//
this.timer1.Interval = 300;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// frmBackUp
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(272, 80);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.label1);
this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "frmBackUp";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "备份数据...";
this.Load += new System.EventHandler(this.frmBackUp_Load);
this.ResumeLayout(false);
}
#endregion
private void timer1_Tick(object sender, System.EventArgs e)
{
this.pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);
this.pictureBox1.Refresh();
}
// public void setType(SetType)
// {
//
private void frmBackUp_Load(object sender, System.EventArgs e)
{
if(this.type==(int)SetType.BackUp)
this.label1.Text="正在备份数据,请稍侯......";
else if(this.type==(int)SetType.Reinstate)
this.label1.Text="正在恢复数据,请稍侯......";
this.timer1.Start();
}
}
}
BackUpAndReinstate组件中的类:(BackUp类和Reinstate类)
BackUp类:
using System;
using System.Data;
using System.Data.SqlClient;
namespace BackUpAndReinstate
{
/// <summary>
/// 数据备份类
/// </summary>
public class BackUp
{
private SqlConnection con=null; //数据库连接对象
private string filepath=null; //备份路径
//单参构造
public BackUp(string filepath)
{
con=new SqlConnection("database=master;user id=sa;password=sa;data source=(local)");
this.filepath=filepath;
}
//数据备份方法
public string DataBaseBackUp()
{
string str="";
SqlCommand cmd=new SqlCommand();
cmd.Connection=con;
cmd.CommandText="select name from sysdevices where name='TeachingBusiness'";
con.Open();
SqlDataReader rdr=cmd.ExecuteReader();
if(!rdr.Read())
{
rdr.Close();
SqlCommand backcmd=new SqlCommand();
backcmd.Connection=con;
backcmd.CommandText="EXEC sp_addumpdevice @devtype,@logicalname,@physicalname";
SqlParameter param=backcmd.Parameters.Add("@devtype",SqlDbType.VarChar,20);
param.Value="disk";
param=backcmd.Parameters.Add("@logicalname",SqlDbType.VarChar,20);
param.Value="TeachingBusiness";
param=backcmd.Parameters.Add("@physicalname",SqlDbType.NVarChar,260);
param.Value=this.filepath;
backcmd.ExecuteNonQuery();
}
rdr.Close();
try
{
cmd.ExecuteNonQuery();
}
catch(SqlException er)
{
str=er.Message;
return str;
}
cmd.CommandText="backup database TeachingBusiness to TeachingBusiness";
try
{
cmd.ExecuteNonQuery();
}
catch(SqlException er)
{
str=er.Message;
return str;
}
finally
{
con.Close();
}
str="已备份成功!";
return str;
}
}
}
Reinstate类:
using System;
using System.Data;
using System.Data.SqlClient;
namespace BackUpAndReinstate
{
/// <summary>
/// 数据恢复类
/// </summary>
public class Reinstate
{
private SqlConnection con=null; //数据库连接对象
//默认构造
public Reinstate()
{
con=new SqlConnection("database=master;user id=sa;password=sa;data source=(local)");
}
//数据恢复方法
public string DataBaseReinstate()
{
string str="";
SqlCommand cmd=new SqlCommand();
cmd.Connection=con;
cmd.CommandText="RESTORE DATABASE TeachingBusiness FROM TeachingBusiness with replace";
con.Open();
try
{
cmd.ExecuteNonQuery();
}
catch(SqlException er)
{
str=er.Message;
return str;
}
finally
{
con.Close();
}
str="已成功恢复数据库";
return str;
}
}
}
[此贴子已经被作者于2006-6-30 15:12:28编辑过]
用我的比楼上的简单!