( 用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相关推荐

  1. c#+mysql图片存数据库_C#图片存入数据库及其读出显示

    <1>将图片转换成二进制插入数据库 FileStream fs = new FileStream("D:\\Add.ico",FileMode.Open); byte[ ...

  2. mysql 备份如何使用_如何使用命令来备份和还原MySQL数据库

    数据库在使用当中都会有数据库备份工作,当数据库发生严重错误无法启动,或者数据丢失时可以及时有效地恢复数据.那么多备份就简单介绍如何使用命令来备份和还原MySQL数据库. 备份数据库 使用mysqldu ...

  3. mysql怎么加载bak文件_MySQL数据库(表)的导入导出(备份和还原)

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  4. php备份和恢复源码,PHP数据库备份还原类

    php代码<?php /** * 数据库备份还原类 * @author xialeistudio* @date 2014-03-17 * Class DatabaseTool */ class ...

  5. mysql备份数据库某表格_MySQL备份:使用自动轮换表格备份,轻松恢复部分/完整数据库...

    MySQL备份:按表自动轮换备份,易于恢复部分/完整数据库 这是一个MySQL备份脚本,可以采用压缩格式的表格备份(每个数据库的每个表的单个备份文件). 它还提供了自动轮换旧的备份文件. 备份脚本分别 ...

  6. mysql数据库的密码破解/用户授权/备份/图形化管理工具phpmyadmin

    mysql数据库的密码破解/用户授权/备份/图形化管理工具phpmyadmin 1.数据库密码管理 a)数据库密码更改(知道数据库原密码) 实验步骤: 1)使用mysqladmin -u指定用户 -p ...

  7. mysql数据库异地恢复_数据库的异地备份恢复及恢复

    文中多数参考网友,恢复未测试其他均已测试. 如需完整版内容留下邮箱我给你发 Mysql数据库异地备份 一. 简介 1.1 增量备份简介 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备 ...

  8. mysql还原数据库报错_MySQL数据库还原

    当数据库中的数据,遭到破坏时,可以通过备份好的数据文件进行还原 还原 是指还原数据库中的数据,然后,库是不能被还原的 备份文件,实际上就是由多个CREATE.INSERT和DROP语句组成,因此,只要 ...

  9. Linux系统mongdb还原数据库,linux下mongodb数据库备份与还原

    MongoDb数据库备份还原 数据库迁移,可视化工具NoSQLBooster for MongoDB 付费版才具有数据导入功能.代价过高,索性采起命令行web 数据备份 备份命令mongodb mon ...

最新文章

  1. Java-Scanner键盘输入
  2. 苹果推出Apple Pay防欺诈功能 目前仅限于Visa
  3. 时隔 5 年,华为再发旧文《华为到该炸掉研发金字塔的时候了》意欲何为?
  4. 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。...
  5. [JS]视频总结-第一部分_了解JavaScript
  6. Ali-tomcat之HSF框架Demo启动报错HSFServiceAddressNotFoundException
  7. fn映射 mac 键盘_fn键:Mac Fn组合按键功能与使用方法
  8. HQChart实战教程17 -K线沙盘推演
  9. Contest chair of English humor speech contest-2013-8-30
  10. c语言贪吃蛇游戏问题描述,贪吃蛇小游戏的几个问题
  11. 小巧的menuetOS
  12. HUD玻璃检测工装背景简介
  13. C语言中统计英文单词的个数
  14. 编程新技术实务实验二HTML以及J2EE简单编程
  15. java get/set方法好处
  16. lnmp分离网站基础架构
  17. 机器人硬件需求描述标准化
  18. win7家庭版和旗舰版区别_Win7 ultimate是什么版本?ultimate是什么意思功能区别介绍!...
  19. 强化学习使用gym时出现错误:ValueError: too many values to unpack (expected 4)
  20. 万卷书 - 21世纪的投资 21st Century Investing

热门文章

  1. 移动网关 HTTP 无法直接一次返回结果的处理
  2. 安装完Anaconda python 3.8,降级python3.6方法
  3. Ubuntu 20 安装包下载(清华镜像)
  4. 解封你的微信外挂服务器,微信自助工具解封操作方法
  5. 关于 Linux中systemd的一些笔记
  6. Android移动应用开发之使用异步调用进度条及实现幻灯片切换效果
  7. 用80行代码数1000个孔——《Python也可以》之四
  8. 2010,只有感恩。
  9. leetcode系列-27. 移除元素
  10. 西门子PLC smart200伺服液压PID昆仑通态人机界面一套完整项目程序