在.Net中进行SQL Server数据库备份与还原操作实用类
#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数据库备份与还原操作实用类的更多相关文章
- (图解版)SQL Server数据库备份与还原
本文介绍了SQL Server数据库备份的两种方式.一种是直接拷贝数据库中的文件mdf 和日志文件ldf,另一种是生成脚本语言. 第一种方式: 选中需要备份的数据库,将数据库从运行的数 ...
- sql server数据库备份单个表的结构和数据生成脚本
1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...
- sql server数据库备份单个表的结构和数据生成脚本【转】
1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...
- SQL Server数据库备份的镜像
SQL Server数据库备份的镜像 一个完整备份可以分开镜像 USE master GO BACKUP DATABASE [testdatabase] TO DISK = N'C:\testdata ...
- SQL Server数据库备份:通过Windows批处理命令执行
通过Windows批处理命令执行SQL Server数据库备份 建立mybackup.bat ,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行. --- ...
- SQL Server数据库备份(本机)
基础的SQL Server数据库备份存储过程 /**************************************************************************** ...
- 访问内网中的sql server数据库的简便方法
前言: 有时候我们要访问局域网内的 sql server服务器,比如测试环境数据库在公司内网,回到家或在客户现场要连接内网中的数据库 第一步:假如可以连接局域网的数据库 192.168.150.129 ...
- SQL server数据库备份还原问题备忘(亲测有效)
问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...
- sql server 数据库备份历史记录
sql server 数据库备份历史记录 SELECT ),SERVERPROPERTY('Servername'))AS Server, bs.database_name, bs.backup_st ...
随机推荐
- Java 之NIO
1. NIO 简介 Java NIO(New IO)是从1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API; NIO 与原来的IO有同样的作用和目的,但是使用的方式完全不同 ...
- windows 下 方便工作的bat文件批处理命令
1.删除目录下 不包含某串字符的文件: @echo offfor /f "delims=" %%a in ('dir /s /a-d/b *.mp3') do ( echo &qu ...
- 【我的Android进阶之旅】 RxJava 理解Backpressure并解决异常 rx.exceptions.MissingBackpressureException
今天测试人员在测试应用APP的时候应用crash了,查看了下crash log如下所示: java.lang.IllegalStateException: Exception thrown on Sc ...
- 前端 javascript 写代码方式
javascript 和python一样可以用终端写代码 写Js代码: - html文件中编写 - 临时,浏览器的终端 console
- crm 使用stark组件
# Create your models here. from django.db import models class Department(models.Model): "" ...
- HDU 2191 珍惜现在,感恩生活(多重背包模板题)
多重背包模板题 #include<iostream> #include<cstring> #include<algorithm> using namespace s ...
- 利用maven-dependency-plugin插件使用及场景
背景: 1.需要某个特殊的 jar包,但是有不能直接通过maven依赖获取,或者说在其他环境的maven仓库内不存在,那么如何将我们所需要的jar包打入我们的生产jar包中. 2.某个jar包内部包含 ...
- Codeforces Round #430 (Div. 2) C. Ilya And The Tree
地址:http://codeforces.com/contest/842/problem/C 题目: C. Ilya And The Tree time limit per test 2 second ...
- SVN文件版本太旧问题解决
错误信息如下: E155036: The working copy at '/Users/...' is too old (format 10) to work with client version ...
- etcd:从应用场景到实现原理的全方位解读 转自infoq
转自 infoq etcd:从应用场景到实现原理的全方位解读 http://www.infoq.com/cn/articles/etcd-interpretation-application-scen ...