c#+mysql备份还原数据库_C#实现对数据库的备份还原(完全) – meimao5211
( 用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();
}
}
}
欢迎加入我爱机器学习QQ14群:336582044
微信扫一扫,关注我爱机器学习公众号
c#+mysql备份还原数据库_C#实现对数据库的备份还原(完全) – meimao5211相关推荐
- c#+mysql图片存数据库_C#图片存入数据库及其读出显示
<1>将图片转换成二进制插入数据库 FileStream fs = new FileStream("D:\\Add.ico",FileMode.Open); byte[ ...
- mysql 备份如何使用_如何使用命令来备份和还原MySQL数据库
数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据.那么多备份就简单介绍如何使用命令来备份和还原MySQL数据库. 备份数据库 使用mysqldu ...
- mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
- php备份和恢复源码,PHP数据库备份还原类
php代码<?php /** * 数据库备份还原类 * @author xialeistudio* @date 2014-03-17 * Class DatabaseTool */ class ...
- mysql备份数据库某表格_MySQL备份:使用自动轮换表格备份,轻松恢复部分/完整数据库...
MySQL备份:按表自动轮换备份,易于恢复部分/完整数据库 这是一个MySQL备份脚本,可以采用压缩格式的表格备份(每个数据库的每个表的单个备份文件). 它还提供了自动轮换旧的备份文件. 备份脚本分别 ...
- mysql数据库的密码破解/用户授权/备份/图形化管理工具phpmyadmin
mysql数据库的密码破解/用户授权/备份/图形化管理工具phpmyadmin 1.数据库密码管理 a)数据库密码更改(知道数据库原密码) 实验步骤: 1)使用mysqladmin -u指定用户 -p ...
- mysql数据库异地恢复_数据库的异地备份恢复及恢复
文中多数参考网友,恢复未测试其他均已测试. 如需完整版内容留下邮箱我给你发 Mysql数据库异地备份 一. 简介 1.1 增量备份简介 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备 ...
- mysql还原数据库报错_MySQL数据库还原
当数据库中的数据,遭到破坏时,可以通过备份好的数据文件进行还原 还原 是指还原数据库中的数据,然后,库是不能被还原的 备份文件,实际上就是由多个CREATE.INSERT和DROP语句组成,因此,只要 ...
- Linux系统mongdb还原数据库,linux下mongodb数据库备份与还原
MongoDb数据库备份还原 数据库迁移,可视化工具NoSQLBooster for MongoDB 付费版才具有数据导入功能.代价过高,索性采起命令行web 数据备份 备份命令mongodb mon ...
最新文章
- Java-Scanner键盘输入
- 苹果推出Apple Pay防欺诈功能 目前仅限于Visa
- 时隔 5 年,华为再发旧文《华为到该炸掉研发金字塔的时候了》意欲何为?
- 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。...
- [JS]视频总结-第一部分_了解JavaScript
- Ali-tomcat之HSF框架Demo启动报错HSFServiceAddressNotFoundException
- fn映射 mac 键盘_fn键:Mac Fn组合按键功能与使用方法
- HQChart实战教程17 -K线沙盘推演
- Contest chair of English humor speech contest-2013-8-30
- c语言贪吃蛇游戏问题描述,贪吃蛇小游戏的几个问题
- 小巧的menuetOS
- HUD玻璃检测工装背景简介
- C语言中统计英文单词的个数
- 编程新技术实务实验二HTML以及J2EE简单编程
- java get/set方法好处
- lnmp分离网站基础架构
- 机器人硬件需求描述标准化
- win7家庭版和旗舰版区别_Win7 ultimate是什么版本?ultimate是什么意思功能区别介绍!...
- 强化学习使用gym时出现错误:ValueError: too many values to unpack (expected 4)
- 万卷书 - 21世纪的投资 21st Century Investing