您的位置:首页 > 数据库

c#中数据库的备份和恢复

2010-07-24 09:54 471 查看
//数据备份菜单点击事件

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;

}

}

}

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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: