C#实现对数据库的备份还原(完全)
C#实现对数据库的备份还原
( 用SQL语句实现对数据库备份还原操作
备份SqlServer数据库:
backup database 数据库名 to disk (备份文件存放路径+文件名).bak
还原SqlServer数据库:
string path = this.FileUpload1.PostedFile.FileName; //获得备份路径及数据库名称
use master restore database 数据库名 from disk='" + path + "'"; )

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.Sql;
using System.IO;
namespace 数据库备份
{
public partial class Form1 : Form
{
//需要添加一个引用C:\Program Files\Microsoft SQL Server\80\Tools\Binn下的SQLDMO.DLL;
//SQL默认安装下是在以上路径
//备份的文件放在C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP下
string ServerName = "";
string UserName = "sa";//暂时锁定,可以根据需要自己设置
string Password = "sa";
public Form1()
{
InitializeComponent();
}
//获取服务器列表
public ArrayList GetServerList()
{
ArrayList alServers = new ArrayList();
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
try
{
SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers();
for (int i = 1; i <= serverList.Count; i++)
{
alServers.Add(serverList.Item(i));
//comboBox1.Items.Add(serverList.Item(i));
listBox1.Items.Add(serverList.Item(i));
}
}
catch (Exception e)
{
throw (new Exception("取数据库服务器列表出错:" + e.Message));
}
finally
{
sqlApp.Quit();
}
return alServers;
}
//获取数据库列表
public ArrayList GetDbList(string strServerName, string strUserName, string strPwd)
{
string ServerName = strServerName;
string UserName = strUserName;
string Password = strPwd;
ArrayList alDbs = new ArrayList();
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName, UserName, Password);
foreach (SQLDMO.Database db in svr.Databases)
{
if (db.Name != null)
alDbs.Add(db.Name);
listBox2.Items.Add(db.Name);
}
}
catch (Exception e)
{
MessageBox.Show("连接数据库出错:" + e.Message);
}
finally
{
svr.DisConnect();
sqlApp.Quit();
}
return alDbs;
}
//备份数据
public bool BackUPDB(string strDbName, string strFileName, ProgressBar pgbMain)
{
ProgressBar PBar = pgbMain;
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName, UserName, Password);
SQLDMO.Backup bak = new SQLDMO.BackupClass();
bak.Action = 0;
bak.Initialize = true;
SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete += pceh;
bak.Files = strFileName;//这里可以写成路径+文件名形式,自己写!
bak.Database = strDbName;
bak.SQLBackup(svr);
return true;
}
catch (Exception err)
{
throw (new Exception("备份数据库失败" + err.Message));
}
finally
{
svr.DisConnect();
}
}
//进度条
private void Step(string message, int percent)
{
PBar.Visible = true;
PBar.Value = percent;
}
//还原数据
public bool RestoreDB(string strDbName, string strFileName, ProgressBar pgbMain)
{
ProgressBar PBar = pgbMain;
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName, UserName, Password);
SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
int iColPIDNum = -1;
int iColDbName = -1;
for (int i = 1; i <= qr.Columns; i++)
{
string strName = qr.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != -1 && iColDbName != -1)
break;
}
for (int i = 1; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == strDbName.ToUpper())
svr.KillProcess(lPID);
}
SQLDMO.Restore res = new SQLDMO.RestoreClass();
res.Action = 0;
SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
res.PercentComplete += pceh;
res.Files = strFileName;//可以写成路径+文件名
res.Database = strDbName;
res.ReplaceDatabase = true;
res.SQLRestore(svr);
return true;
}
catch (Exception err)
{
throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + err.Message));
}
finally
{
svr.DisConnect();
}
}
private void Form1_Load(object sender, EventArgs e)
{
GetServerList();
string ServerName = "(local)";//这里根据需要自己可以设置成动态的
GetDbList(ServerName, UserName, Password);
}
//根据选择的服务器,列出数据库
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{ //这里可以动态设置服务器名,角色名,密码
//string ServerName = listBox1.SelectedItem.ToString();
//GetDbList(ServerName, UserName, Password);
}
private void SelectPath_Click(object sender, EventArgs e)
{
//选择保存路径
//if (folderBrowserDialog1.ShowDialog(this) == DialogResult.OK)
//{
// string path = folderBrowserDialog1.SelectedPath + "\\";
// txtPath.Text = path;
//}
//else
//{
// folderBrowserDialog1.Dispose();
//}
}
//备份按钮
private void btnSave_Click(object sender, EventArgs e)
{
string strDbName = "db_bookmanage";
txtSaveName.Text = DateTime.Now.ToString("yyyyMMddhhmmss");
string strFileName = txtSaveName.Text.ToString().Trim();
if (BackUPDB(strDbName, strFileName, PBar))
{
PBar.Visible = false;
MessageBox.Show("备份完成!");
}
}
//查看历史备份按钮
private void button2_Click(object sender, EventArgs e)
{
listBox3.Items.Clear();
string[] files = Directory.GetFiles(@"C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP");
foreach (string file in files)
listBox3.Items.Add(file.Substring(file.LastIndexOf("\\") + 1, file.Length - file.LastIndexOf("\\") - 1));
}
//还原数据按钮
private void button1_Click(object sender, EventArgs e)
{
PBar.Visible = true;
string strDbName = "db_bookmanage";
//txtSaveName.Text = DateTime.Now.ToString("yyyyMMddhhmmss");
if (txtReName.Text == "")
{
MessageBox.Show("请选择一个要还原的文件!");
return;
}
string strFileName = txtReName.Text.ToString().Trim();
if (RestoreDB(strDbName, strFileName, PBar))
{
PBar.Visible = false;
MessageBox.Show("还原完成!");
}
}
//历史备份文件名
private void listBox3_SelectedIndexChanged(object sender, EventArgs e)
{
txtReName.Text = listBox3.SelectedItem.ToString();
}
}
}
C#实现对数据库的备份还原(完全)的更多相关文章
- sql 数据库的备份还原问题
今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来覆去的找资料,最终想是不是可 ...
- sql数据库的备份还原问题
sql数据库的备份还原问题 今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来 ...
- mongodb 数据库操作--备份 还原 导出 导入(转)
mongodb 数据库操作--备份 还原 导出 导入 -------------------MongoDB数据导入与导出------------------- 1.导出工具:mongoexport ...
- SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备 ...
- C#中MySQL数据库的备份 还原 初始化
直接在cmd执行如下代码: mysqldump -h localhost -uroot -p123 --default-character-set=utf8 --opt --disable-keys ...
- mongodb 数据库操作--备份 还原 导出 导入
mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport 一,mongodump备份数据 ...
- C# MySQL数据库的备份 还原 初始化
// 执行创建数据库操作 this.GetExecute(G_Con, "create database if not exists NEWDB"); this.sqlAddres ...
- SQL数据库增量备份还原方式
SQLSERVER2008的备份还原最基本的方式自然是完整备份,然后完整还原即可. 但是如果遇到数据库文件很大,数据量很大,备份和还原需要花费不少时间的时候, 数据库的差异备份自然就成为考虑的备份方案 ...
- mysqldump工具实现mysql数据库的备份还原
简介 冷.温.热备份 冷备:读写操作均不可进行 温备:读操作可执行:但写操作不可执行 热备:读写操作均可执行 MyISAM:温备,不支持热备 InnoDB:都支持 不管是热备还原还是冷备还原,还原时都 ...
随机推荐
- html——导航demo
通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- [Windows Server 2008] 安装SQL SERVER 2008
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装SQL S ...
- apache配置多域名二级域名
nginx配置多域名泛解析的看这个链接:https://www.cnblogs.com/Crazy-Liu/p/10879740.html 下面直接来操作: [root@localhost ~]# f ...
- PHP 设计模式--序言
面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C++之后 ...
- js的基础运用
总结: 1.定义:分为隐式定义和显式定义可以先定义后赋值. 2.+:当两边都是数值则运行加法运算,若一遍是字符型则进行拼接. 3.数值变字符:数值变量.toString()方法. 字符变数值:通过加一 ...
- Linux之iptables(四、网络防火墙及NAT)
网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...
- MySQL(端口3306)
MySQL(二进制)安装: 下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49-linux2.6-x86_64.tar.gz ...
- 【[Offer收割]编程练习赛12 A】歌德巴赫猜想
[题目链接]:http://hihocoder.com/problemset/problem/1493 [题意] [题解] 枚举P从2..n/2 如果P是质数且N-P也是质数; 则输出P和N-P就好; ...
- AndroidTreeView:Android树形节点View
AndroidTreeView:Android树形节点View AndroidTreeView是github上的一个第三方开源项目,其在github上的项目主页是:https://github. ...
- bootstrap-table与Spring项目集成实例收集
bootstrap-table项目官网:https://github.com/wenzhixin/bootstrap-table bootstrap-table各版本下载:https://github ...