c#实现附加分离备份还原数据库(绝对原创)
来源:互联网 发布:c语言switch default 编辑:程序博客网 时间:2024/06/05 00:32
c#实现附加分离备份还原数据库(绝对原创)
http://hi.baidu.com/feiyangqingyun/blog/item/454669ca1599048ec91768d0.html
c#实现附加分离备份数据库,无非就是调用SQL Server 里面的存储过程来实现,我把这几项操作都写到一个类当中去了,下面给出源代码,其中已经有些解释,这里不必多说了。
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient ;
using System.Data ;
namespace 附加分离备份还原数据库
{
class BaseClass
{
//自定义函数参数形式获取连接数据库字符串并返回
public static SqlConnection getCon(string connectionString)
{
SqlConnection con = new SqlConnection(connectionString);
return con;
}
//自定义函数获取连接数据库字符串并返回
public static SqlConnection getCon()
{
string str="server=(local);database=master;uid=sa;pwd=";
SqlConnection con = new SqlConnection(str);
return con;
}
//附加数据库参数dbName、db_MDF、db_LDF分别表示附加数据库后的数据库名称,要附加的数据库的路径及名称,要附加的数据库的日志文件路径及名称
public static bool addDb(string dbName, string db_MDF, string db_LDF)
{
SqlConnection con = getCon();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;//要执行的对象是存储过程
cmd.CommandText = "sp_attach_db";
cmd.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter(@"filename1", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter(@"filename2", SqlDbType.NVarChar));
cmd.Parameters[@"dbname"].Value = dbName;
cmd.Parameters[@"filename1"].Value = db_MDF;
cmd.Parameters[@"filename2"].Value = db_LDF;
try
{
con.Open();
int i = cmd.ExecuteNonQuery();
if (i == 0)//如果执行不成功则返回假
{
return false;
}
}
catch
{
return false;
}
finally
{
con.Close();
}
return true;//执行成功则返回真
}
//分离数据库函数,参数dbName为要分离的数据库的名称
public static bool sepDb(string dbName)
{
SqlConnection con = getCon();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;//要执行的对象为存储过程
cmd.Connection = con;
cmd.CommandText = "sp_detach_db";
cmd.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
cmd.Parameters[@"dbname"].Value = dbName;
try
{
con.Open();
int i = cmd.ExecuteNonQuery();
if (i == 0)//如果执行不成功则返回假
{
return false;
}
}
catch
{
return false;
}
finally
{
con.Close();
}
return true;//执行成功则返回真
}
//备份数据库函数,参数dbName,backupName分别代表要备份的数据库和备份数据库的位置及名称
public static bool backupDb(string dbName, string backupName)
{
SqlConnection con = getCon();
string sql = "use master;backup database @dbname to disk=@backupname;";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter(@"backupname", SqlDbType.NVarChar));
cmd.Parameters[@"dbname"].Value = dbName;
cmd.Parameters[@"backupname"].Value = backupName;
try
{
con.Open();
int i = cmd.ExecuteNonQuery();
if (i == 0)//如果执行失败返回假
{
return false;
}
}
catch
{
return false;
}
finally
{
con.Close();
}
return true;//执行成功返回真
}
//还原数据库函数,参数dbName,backupFile分别代表还原后数据库的名称和要还原的数据库路径及名称
public static bool restoreDb(string dbName, string backupFile)
{
SqlConnection con = getCon();
string sql = "use master;restore database @dbname from disk=@backupfile with replace;";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter(@"backupfile", SqlDbType.NVarChar));
cmd.Parameters[@"dbname"].Value = dbName;
cmd.Parameters[@"backupfile"].Value = backupFile;
try
{
con.Open();
int i = cmd.ExecuteNonQuery();
if (i == 0)//如果执行失败返回假
{
return false;
}
}
catch
{
return false;
}
finally
{
con.Close();
}
return true;//执行成功返回真
}
}
}
用的时候直接传参数进去就是了。
1.附加数据库
private void btnAdddb_Click(object sender, EventArgs e)//附加数据库
{
string filename1 = txtDbmdf.Text.Trim();
string filename2 = txtDbldf.Text.Trim();
if (this.check1())
{
if (BaseClass.addDb("附加", filename1, filename2))//如果执行成功,则弹出提示
{
MessageBox.Show("附加数据库成功!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("附加数据库失败!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
2.分离数据库
private void btnSepdb_Click(object sender, EventArgs e)//分离数据库
{
string dbName = cboxDbname.Text;
if (BaseClass.sepDb(dbName))
{
MessageBox.Show("分离数据库成功!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("分离数据库失败!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
3.备份数据库
private void btnBackUp_Click(object sender, EventArgs e)//备份数据库
{
string dbName = cboxDataBaseName.Text.Trim();
string backupFile = txtBackupPath.Text.Trim();
if (this.check2())
{
if (BaseClass.backupDb(dbName, backupFile))
{
MessageBox.Show("备份数据库成功!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("备份数据库成功!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
4.还原数据库
private void btnRestore_Click(object sender, EventArgs e)//还原数据库
{
string dbName = cboxRestoreDataBaseName.Text.Trim();
string backupFile = txtRestorePath.Text.Trim();
if (this.check2())
{
if (BaseClass.restoreDb(dbName, backupFile))
{
MessageBox.Show("还原数据库成功!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("还原数据库失败!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
再给出一下其它辅助的代码:
//检验是否已经选择了要附加的数据库及日志文件
private bool check1()
{
if (txtDbldf.Text.Trim() == "" || txtDbmdf.Text.Trim() == "")
{
MessageBox.Show("请选择你要附加的数据库", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtDbmdf.Focus();
return false;
}
return true;
}
private bool check2()
{
if (txtBackupPath.Text.Trim() == "" && rbtnBackup .Checked ==true)
{
MessageBox.Show("请选择你要备份数据库的路径", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtBackupPath.Focus();
return false;
}
if (txtRestorePath.Text.Trim() == "" && rbtnRestore .Checked ==true)
{
MessageBox.Show("请要还原的数据库及选择原备份数据库文件!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtRestorePath.Focus();
return false;
}
return true;
}
//从服务器中获取所有数据库名称
private void getDbname()
{
SqlConnection con = BaseClass.getCon();//获取数据库连接
SqlCommand cmd = new SqlCommand("exec sp_helpdb", con);//执行存储过程遍历出所有数据库名称
try
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
cboxDbname.Items.Add(dr.GetValue(0));
cboxDataBaseName.Items.Add(dr.GetValue(0));
cboxRestoreDataBaseName.Items.Add(dr.GetValue(0));
}
if (cboxDbname.Items.Count > 0)//如果下拉框存在值的话,则让其选中第一项
{
cboxDbname.SelectedIndex = 0;
}
if (cboxDataBaseName.Items.Count > 0)//如果下拉框存在值的话,则让其选中第一项
{
cboxDataBaseName.SelectedIndex = 0;
}
if (cboxRestoreDataBaseName.Items.Count > 0)//如果下拉框存在值的话,则让其选中第一项
{
cboxRestoreDataBaseName.SelectedIndex = 0;
}
}
catch (Exception ex)
{
MessageBox.Show("获取数据库时出错,原因可能是:" + ex, "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
con.Close();
}
}
弄了几个小时,调试了好久,终于弄出来了,大家也可以把类生成DLL文件,以后直接用就是咯!
- c#实现附加分离备份还原数据库(绝对原创)
- 使用C#对sqlser数据库【备份】【还原】【分离】【附加】
- 数据库 备份、还原、分离、附加区别
- 数据库备份还原与分离附加
- 用分离、附加的方式实现sql server数据库的备份和还原
- C#附加数据库算法及思路,包括附加、还原、备份、分离、压缩、创建、修改等常见操作(修正)
- sql数据库的分离和附加,备份和还原
- SQL数据库的分离附加,导出脚本,备份和还原
- 一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)
- c#自动附加分离备份还原数据库 C#生成安装文件后自动附加数据库的思路跟算法 打包之后,运行之前
- C#对数据库操作的类,包括附加、还原、备份、分离、压缩、创建、修改等常见操作
- 【转载苏飞的博客】一个操作数据库的类(备份,还原,分离,附加,添加删除用户等操作)
- 网友写的一个数据库远程备附加、分离、备份、还原类
- SQL Server 2005数据库的附加和分离/备份与还原实验指导
- SQL 数据库 学习 005 学习必备的一些操作 --- 如何新建数据库 如何附加和分离数据库(如何备份还原数据库) 如何删除数据库
- C#实现数据库的备份与还原
- C#实现数据库的备份与还原
- 数据库备份与还原的C#实现
- 蜜罐项目和网站
- lwip-SNMP移植
- asp.net和c#实现定时备份数据库(SQL Server2000)
- aspnet 在线备份 SQL Server 数据库
- 【经典】C#操作ACCESS数据库(创建,压缩,备份,恢复)
- c#实现附加分离备份还原数据库(绝对原创)
- c#操作Access数据库的方法大全
- Access注入语句大全
- 从简单工厂模式看MVC
- SQL语句导入导出大全,包括excel,access
- C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
- 拉链表设计
- 在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
- 设计模式原则