public class BakDBHelper
{ /// <summary>
/// 创建数据库备份
/// </summary>
public string CreateBackup(string dbname, string backname)
{
string res = "";
//要备份的位置
//string dbfullname = GetDbPath() + string.Format("{0}_{1}.bak", dbname, DateTime.Now.ToString("yyyyMMddhhmmss"));
string dbfullname = GetDbPath() + backname;
//判断文件是否存在
if (File.Exists(dbfullname))
{
File.Delete(dbfullname);
//MessageBox.Show(dbfullname + "的备份文件已经存在,请稍后再试");
}
try
{
SqlConnection con = new SqlConnection(GetConn());
SqlCommand cmd = con.CreateCommand();
con.Open();
try
{
cmd.CommandText = "use master";
cmd.ExecuteNonQuery(); //1. 执行备份操作
StringBuilder sql = new StringBuilder();
//sql.Append("exec master.dbo.proc_Backup @dbName,@dbFullName"); sql.Append(@"DECLARE @kid varchar(100)
SET @kid=''
SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses
WHERE dbid=DB_ID(@dbName)
PRINT @kid
EXEC(@kid);
backup database "+ dbname + " to disk=@dbFullName;"); SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@dbName",SqlDbType.NVarChar,),
new SqlParameter("@dbFullName",SqlDbType.NVarChar,),
};
parameters[].Value = dbname;
parameters[].Value = dbfullname; cmd.Parameters.Clear();
cmd.Parameters.AddRange(parameters);
cmd.CommandText = sql.ToString();
cmd.ExecuteNonQuery();
res = "备份完成";
}
finally
{
con.Close();
}
}
catch (Exception ex)
{
res = "创建数据库备份出错:" + ex;
}
return res;
} /// <summary>
/// 还原数据库
/// </summary>
public string Restore(string dbname, string backname)
{
string res = "";
//1.获取还原数据库和文件
string dbFullName = GetDbPath() + backname;
try
{
//2.执行还原操作
SqlConnection con = new SqlConnection(GetConn());
SqlCommand cmd = con.CreateCommand();
con.Open();
try
{
cmd.CommandText = "use master";
cmd.ExecuteNonQuery(); StringBuilder sql = new StringBuilder();
//sql.Append("exec proc_Restore @dbFullName,@dbName"); sql.Append(@"--1.1修改为单用模式
exec(N'ALTER DATABASE '+@dbName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');
--1.2结束链接进程
DECLARE @kid varchar(max)
SET @kid=''
SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses
WHERE dbid=DB_ID(@dbName) ;
EXEC(@kid) ;
--2.执行还原语句
restore database @dbName from disk=@dbFullName
with replace --覆盖现有的数据库
--3.重置数据库为多用户模式
exec(N'ALTER DATABASE '+@dbName+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');");
SqlParameter[] parameters = new SqlParameter[]{
new SqlParameter("@dbName",SqlDbType.NVarChar,),
new SqlParameter("@dbFullName",SqlDbType.NVarChar,),
};
parameters[].Value = dbname;
parameters[].Value = dbFullName; cmd.CommandText = sql.ToString();
cmd.Parameters.AddRange(parameters);
cmd.ExecuteNonQuery();
res = "还原数据库完成";
}
finally
{
con.Close();
} }
catch (Exception ex)
{
res = "还原数据库出错" + ex;
}
return res;
} private static string GetDbPath()
{
return ConfigurationManager.AppSettings["bak_url"].ToString();
} private static string GetConn()
{
return ConfigurationManager.AppSettings["bak_con"].ToString();
} public int execSQLCommand(string sql)
{
int res;
try
{
//2.执行还原操作
SqlConnection con = new SqlConnection(GetConn());
SqlCommand cmd = con.CreateCommand();
con.Open();
try
{
cmd.CommandText = sql;
res = cmd.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
catch (Exception)
{
return -;
}
return res;
}
}

SQLSERVER SQL备份还原代码C#的更多相关文章

  1. SQL备份数据库代码

    SQL备份数据库代码 #region 服务每天备份一次数据库 /// <summary> /// 服务每天备份一次数据库 /// </summary> public void ...

  2. sqlserver 2005 备份还原失败

    1.直接右键还原数据库可能会失败.如果失败 使用下面的sql语句还原 USE MASTER RESTORE DATABASE bingo FROM DISK = 'F:\DevProject\bing ...

  3. Ext sqlserver C# 数据库备份还原代码,给大家参考下

      <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %& ...

  4. SQL备份还原,分离附加

    备份.还原.分离.附加 备份:在要备份的数据库上右键点击任务,在选择备份.在打卡的对话框中根据需要选择.注意:备份过期时间不能为0,否则会马上过期.目标可根据需要放在任何位置.最后,点击确定,备份成功 ...

  5. SQL 备份还原单个表

    如果只想备份或恢复单个表而不想备份或恢复整个数据库的话,往往有以下方法: 1.在Sql server2000 中可以使用DTS来将该表的数据导出成另外的文件格式.当需要恢复时,可以将该文件中数据再通过 ...

  6. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  7. SQL Server差异备份的备份/还原原理

    SQL Server差异备份的备份/还原原理 记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异   备份过程: 1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最 ...

  8. SQL Server 数据库备份还原和数据恢复

      认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据 ...

  9. SQLServer批量备份与还原

    原文地址:http://www.cnblogs.com/fygh/archive/2011/09/09/2172546.html 备份与还原是数据库避不开的主题,而作为DBA,经常会面临将一台机器上的 ...

随机推荐

  1. Another app is currently holding the yum lock; waiting for it to exit.. yum被锁定无法使用

    yum被锁定无法使用 Another app is currently holding the yum lock; waiting for it to exit.. 解决方法: rm -rf /var ...

  2. jstypeof方法判断undefined类型

    有关js判断undefined类型,使用typeof方法,typeof 返回的是字符串,其中就有一个是undefined. js判断undefined类型if (reValue== undefined ...

  3. 【Unity】7.2 鼠标输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在桌面系统的游戏中,鼠标输入是最基本的输入方式之一.游戏很多操作都需要鼠标来完成,例如武器的瞄准和开火.菜单的单击.物体 ...

  4. 【Unity】6.4 Transform--移动、旋转和缩放游戏对象

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 Unity引擎提供了丰富的组件和类库,为游戏开发提供了非常大的便利,熟练掌握和使用这些API,对于游戏开发的效率提高很重 ...

  5. 行为类模式(五):中介者(Mediator)

    定义 定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互. 试想一下,如果多个类之间相互都有引用,那么当其中一个类修改 ...

  6. Techniques for HA IT Management

    7. Techniques That Address Multiple Availability Requirements Redundancy Hardware Redundancy Example ...

  7. vscode 换行符\n 变成\r\n

    VSCode是一个开源的强大代码编写器,但是如果没有好好的配置使用,会适得其反. 这里总结VSCode的一些配置,方便自己查询,也方便网友. 1.编辑器配置 为特定类型文件指定缩进大小.缩进类型(空格 ...

  8. git(8):常用命令

    Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v ...

  9. (转)C++11里的智能指针

    1. std::auto_ptr有些违背c++编程思想. 已经被"不建议使用了".2. 下文转自:http://blog.csdn.net/lanergaming/article/ ...

  10. linux如何查看一个进程的堆栈

    转自:http://blog.csdn.net/nanjingligong/article/details/8624739 方法一:pstack pidNAME       pstack - prin ...