#region 类说明
//-----------------------------------------------------------------------------
//
// 项目名称:***
// 文件名称:DBBakManager.cs
// 文件说明:对数据库备份文件进行管理。提供备份、还原、备份文件管理操作。
//
// 开始日期:20014年05月04日
// 开发人员:***
//
//-----------------------------------------------------------------------------
#endregion using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using SQLDMO; //添加引用C:Program FilesMicrosoft SQL Server80ToolsBinnSQLDMO.dll namespace GSIM.StuManager
{
/// <summary>
/// 对SQL Server数据库备份文件进行管理。提供备份、还原、备份文件管理操作。
/// </summary>
public class DBBakManager
{ 字段#region 字段 private string _serverName;
private string _userName;
private string _password;
private string _dbName; #endregion 构造#region 构造 /// <summary>
/// 构造函数
/// </summary>
/// <param name="serverName">数据库服务器名
/// <param name="userName">数据库用户名
/// <param name="password">用户密码
/// <param name="dbName">数据库名
public DBBakManager(string serverName, string userName, string password,string dbName)
{
_serverName = serverName;
_userName = userName;
_password = password;
_dbName = dbName;
} #endregion 方法#region 方法 /// <summary>
/// 备份数据库
/// </summary>
/// <param name="saveFileName">保存的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
/// <returns>操作成功返回true,否则返回false</returns>
public bool BackUpDB(string saveFileName)
{
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(_serverName, _userName, _password);
SQLDMO.Backup bak = new SQLDMO.BackupClass();
bak.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
bak.Initialize = true;
bak.Database = _dbName;
bak.Files = saveFileName;
bak.SQLBackup(svr);
return true;
}
catch (Exception err)
{
return false;
}
finally
{
svr.Close();
}
} /// <summary>
/// 还原数据库备份
/// </summary>
/// <param name="fileName">还原的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
/// <returns>操作成功返回true,否则返回false</returns>
public bool RestoreDB(string fileName)
{
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(_serverName, _userName, _password);
//取得所有的进程列表
SQLDMO.QueryResults qr = svr.EnumProcesses(-);
int iColPIDNum = -;
int iColDbName = -;
//找到和要恢复数据库相关的进程
for (int i = ; 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 != - && iColDbName != -)
break;
}
//将相关进程关闭
for (int i = ; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == _dbName)
svr.KillProcess(lPID);
} SQLDMO.Restore res = new SQLDMO.RestoreClass(); res.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
res.Files = fileName; res.Database = _dbName;
res.FileNumber = ; res.ReplaceDatabase = true;
res.SQLRestore(svr); return true;
}
catch (Exception err)
{
return false;
}
finally
{
svr.Close();
}
} /// <summary>
/// 获得所有数据库备份文件信息,如:200704041120.
/// </summary>
/// <param name="filePath">保存备份文件的文件夹路径(不包括文件名)
/// <returns>包含文件信息的字符串组</returns>
public string[] GetAllDBBak(string filePath)
{
string[] DBBakInfo = Directory.GetFiles(filePath, "BMIS*");
int start = DBBakInfo[].IndexOf("(");
int end = DBBakInfo[].IndexOf(")");
//除去多余部分,返回名字中的时间信息,如:200704041120.
for (int i = ; i < DBBakInfo.Length; i++)
{
DBBakInfo[i] = DBBakInfo[i].Substring(start + , end - start - );
}
return DBBakInfo;
} /// <summary>
/// 删除一个数据库备份文件
/// </summary>
/// <param name="fileName">删除的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
/// <returns>操作成功返回true,否则返回false</returns>
public bool DeleteDBBak(string fileName)
{
if (File.Exists(fileName) == true)
{
File.Delete(fileName);
return true;
}
else
{
return false;
} } #endregion
}
}

在.Net中进行SQL Server数据库备份与还原操作实用类的更多相关文章

  1. (图解版)SQL Server数据库备份与还原

        本文介绍了SQL Server数据库备份的两种方式.一种是直接拷贝数据库中的文件mdf 和日志文件ldf,另一种是生成脚本语言. 第一种方式:     选中需要备份的数据库,将数据库从运行的数 ...

  2. sql server数据库备份单个表的结构和数据生成脚本

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

  3. sql server数据库备份单个表的结构和数据生成脚本【转】

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

  4. SQL Server数据库备份的镜像

    SQL Server数据库备份的镜像 一个完整备份可以分开镜像 USE master GO BACKUP DATABASE [testdatabase] TO DISK = N'C:\testdata ...

  5. SQL Server数据库备份:通过Windows批处理命令执行

    通过Windows批处理命令执行SQL Server数据库备份 建立mybackup.bat ,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行. --- ...

  6. SQL Server数据库备份(本机)

    基础的SQL Server数据库备份存储过程 /**************************************************************************** ...

  7. 访问内网中的sql server数据库的简便方法

    前言: 有时候我们要访问局域网内的 sql server服务器,比如测试环境数据库在公司内网,回到家或在客户现场要连接内网中的数据库 第一步:假如可以连接局域网的数据库 192.168.150.129 ...

  8. SQL server数据库备份还原问题备忘(亲测有效)

    问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...

  9. sql server 数据库备份历史记录

    sql server 数据库备份历史记录 SELECT ),SERVERPROPERTY('Servername'))AS Server, bs.database_name, bs.backup_st ...

随机推荐

  1. HDFS 手写mapreduce单词计数框架

    一.数据处理类 package com.css.hdfs; import java.io.BufferedReader; import java.io.IOException; import java ...

  2. squee_spoon and his Cube VI---郑大校赛(求最长子串)

    市面上最常见的魔方,是三阶魔方,英文名为Rubik's Cube,以魔方的发明者鲁比克教授的名字命名.另外,二阶魔方叫Pocket Cube,它只有2*2*2个角块,通常也就比较小:四阶魔方叫Reve ...

  3. Navicat工具、pymysql模块、数据备份

    IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mys ...

  4. Sails 框架学习资料

    一介布衣 http://yijiebuyi.com/so.html?k=sails sails modules 模型自带的方法介绍 2016-09-06  929  nodejs查看更多 node.j ...

  5. PHP面试专用笔记精简版

    [PHP笔记] 1.require 遇到即包含文件,require_once 只包含一次.require 遇到错误会终止,一般放在程序的最前面:include遇到错误会继续执行,一般放在流程控制语句中 ...

  6. Java栈之链式栈存储结构实现

    一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链 ...

  7. css3 利用dispaly:flex

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  8. 64. Minimum Path Sum(最小走棋盘 动态规划)

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  9. POJ - 1966 Cable TV Network (最大流求点连通度)

    题意:求一个无向图的点连通度.点联通度是指,一张图最少删掉几个点使该图不连通:若本身是非连通图,则点连通度为0. 分析:无向图的点连通度可以转化为最大流解决.方法是:1.任意选择一个点作为源点:2.枚 ...

  10. sgu 100 A+B 解题报告及测试数据

    100.A+B time limit per test: 0.25 sec. memory limit per test: 65536 KB 题解:上手题,不解释. 直接上代码: #include & ...