C#实现SQL数据库备份与恢复
有两种方法,都是保存为.bak文件。一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现:
MOVE 'dbName_Log' TO 'c:/comcrm20041217.ldf' ----日志文件还原后存放的新位置
{
string saveAway = this.tbxBakLoad.Text.ToString().Trim();
string cmdText = @"backup database " + System.Configuration.ConfigurationSettings.AppSettings["dbName"] + " to disk='" + saveAway + "'";
BakReductSql(cmdText,true);
}
{
string openAway = this.tbxReductLoad.Text.ToString().Trim();//读取文件的路径
string cmdText = @"restore database " + System.Configuration.ConfigurationSettings.AppSettings["dbName"] + " from disk='" + openAway + "'";
BakReductSql(cmdText,false);
}
/// 对数据库的备份和恢复操作,Sql语句实现
/// </summary>
/// <param name="cmdText">实现备份或恢复的Sql语句</param>
/// <param name="isBak">该操作是否为备份操作,是为true否,为false</param>
private void BakReductSql(string cmdText,bool isBak)
{
SqlCommand cmdBakRst = new SqlCommand();
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=master;uid=sa;pwd=;");
{
conn.Open();
cmdBakRst.Connection = conn;
cmdBakRst.CommandType = CommandType.Text;
if (!isBak) //如果是恢复操作
{
string setOffline = "Alter database GroupMessage Set Offline With rollback immediate ";
string setOnline = " Alter database GroupMessage Set Online With Rollback immediate";
cmdBakRst.CommandText = setOffline + cmdText + setOnline;
}
else
{
cmdBakRst.CommandText = cmdText;
}
cmdBakRst.ExecuteNonQuery();
if (!isBak)
{
MessageBox.Show("恭喜你,数据成功恢复为所选文档的状态!", "系统消息");
}
else
{
MessageBox.Show("恭喜,你已经成功备份当前数据!", "系统消息");
}
}
catch (SqlException sexc)
{
MessageBox.Show("失败,可能是对数据库操作失败,原因:" + sexc, "数据库错误消息");
}
catch (Exception ex)
{
MessageBox.Show("对不起,操作失败,可能原因:" + ex, "系统消息");
}
finally
{
cmdBakRst.Dispose();
conn.Close();
conn.Dispose();
}
}
2.用SQLDMO实现(下面代码引用别人的)
string backaway =textbox1.Text.Trim();
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
//下面设置登录sql服务器的ip,登录名,登录密码
oSQLServer.Connect(serverip, serverid, serverpwd);
oBackup.Action = 0;
//下面两句是显示进度条的状态
SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step2);
oBackup.PercentComplete += pceh;
//数据库名称:
oBackup.Database = "k2";
//备份的路径
oBackup.Files = @backaway;
//备份的文件名
oBackup.BackupSetName = "k2";
oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
MessageBox.Show("备份成功!", "提示");
}
catch
{
MessageBox.Show("备份失败!", "提示");
}
finally
{
oSQLServer.DisConnect();
}
//数据库恢复
//获取恢复的路径
string dbaway = textbox2.Text.Trim();
SQLDMO.Restore restore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer server = new SQLDMO.SQLServerClass();
server.Connect(serverip, serverid, serverpwd);
//KILL DataBase Process
conn = new 工资管理系统.CCUtility.connstring();
conn.DBOpen();
SqlCommand cmd = new SqlCommand("use master Select spid FROM sysprocesses ,sysdatabases Where sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='k2'", conn.Connection);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
server.KillProcess(Convert.ToInt32(dr[0].ToString()));
}
dr.Close();
conn.DBClose();
try
{
restore.Action = 0;
SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
restore.PercentComplete += pceh;
restore.Database = "k2";
restore.Files = @dbaway;
restore.ReplaceDatabase = true;
restore.SQLRestore(server);
MessageBox.Show("数据库恢复成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
恢复相关的参数和备份相同,不再解释,自己看一下.
上面两个函数调用到了更改进度条的两个函数:
private void Step2(string message, int percent)
{
progressBar2.Value = percent;
}
private void Step(string message, int percent)
{
progressBar1.Value = percent;
}
setp对应备份,,setp2对应恢复....
C#实现SQL数据库备份与恢复的更多相关文章
- sql server 备份与恢复系列八 系统数据库备份与恢复分析
一.概述 在前面讲过"sql server 备份与恢复系列"都是集中在用户数据库上.sql server还维护着一组系统数据库,这些系统数据库对于服务器实例的运行至关重要.在每次进 ...
- SQL Server 2000数据库备份与恢复图解
SQL Server 2000数据库备份与恢复图解 四个步骤:1.安装sql server 2000 2.数据库设置: 3.建立自动备份 4.还原数据库 具体图片见附件 本文出自 "李 ...
- sql server 备份与恢复系列四 大容量模式下的备份与还原
一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...
- PHP数据库备份与恢复
先说下关于数据库备份与恢复的原理: 1.查找所有表->2.查找所有字段->3.查找所有数据->4.生成SQL 备份注意点: 2=>需要列出所有字段名,字段类型等相关信息 3=& ...
- Oracle数据库备份与恢复的三种方法
转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...
- Oracle 10g数据库备份与恢复操作手册
Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...
- 小贝_mysql数据库备份与恢复
mysql数据库备份与恢复 简要: 一.数据库备份 二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...
- ORACLE数据库备份与恢复详解
ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻 ...
- oracle 数据库备份与恢复
oracle 数据库备份与恢复 包含四个部分: 1.数据泵备份与恢复 2.rman备份与恢复 3.CSV增量备份恢复 4.截库操作 1.数据泵备份与恢复 expdp/ / impdp 时的 CONTE ...
随机推荐
- Hexo博客 云服务器搭建
下载nodejs: https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz 解压:tar zxv 解压后编译: ...
- ES6的新特性(1)——ES6 的概述
ES6 的概述 首先,感谢马伦老师的ES6新特性的教程. ECMAScript 和 JavaScript 的关系是 ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前 ...
- BZOJ 4945 NOI2017 游戏 搜索+2-SAT
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4945 分析: 首先考虑没有x的情况,发现有一个明显的推理模型,容易看出来可以用2-SAT ...
- OGNL动态实现result
OGNL就是struts.xml文件中的<result>通过get()方法,动态获取action类中的变量 <struts> <package name="de ...
- 周总结<1>
由于都不清楚周总结的格式,所以就没有写了.不过,上次听了老师的课,觉得应该要好好写写了,至少今后可以明白自己有做过什么事情,至少不会觉得自己在各个方面没有收获.不过,可能没有按照格式来写.希望老师体谅 ...
- 安装DHCP 服务器 指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码
DHCP服务详解 前言:动态主机配置协议,给局域网内的主机分配IP地址,子网掩码,网关,DNS ARP协议 arp: address resolveing protocol (地址解析协议) 实现:I ...
- IT就业·软件工程之我见
随着计算机技术的飞速发展,让人们深切感受到科技让生活更美好的真正含义. 现如今我们的正常生活,社交都越来越离不开网络和终端,因特网和各种终端设备的组合让我们即使相距千里,也能面对面对话交流:购物,我们 ...
- 第八次JAVA语言笔记
- 小程序 switch按钮
<view class='pay-switch'> <switch color='#1F3238' data-gongprice='{{gongprice}}' data-disco ...
- JS扫雷原理性代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...