ADO.NET 备份还原数据库
来源:互联网 发布:心灵召唤技能的db数据 编辑:程序博客网 时间:2024/05/16 04:46
1.首先在APP.config 里添加配置
<pre name="code" class="html"><appSettings> <!--需要备份的数据库名字--> <add key="_Bak_DatabaseName" value="DemoTestDB"/> <!--将数据库备份到的数据库名称--> <add key="_Bak_ToBakName" value="DemoTestDB备份库名字"/> <!--数据库备份地址--> <add key="_Bak_Path" value="E:/DB/"/> <!--数据库备份间隔时间(DAY:每天备份;MONTH:每月备份)--> <add key="_Bak_Time" value="Day"/> <!--需要还原的数据库名--> <add key="_Restore_DatabaseName" value="DemoTestDB"/> <!--还原数据库地址--> <add key="_Restore_FromDisk" value="E:/DB/DemoTestDB_2015-6-16.bak"/> </appSettings>
2.下面就是代码啦
这是获取配置文件里的信息
//连接数据库语句 private readonly string _connString = ConfigurationManager.AppSettings["_Connection"]; //需要备份数据库名字 private readonly string _databaseName = ConfigurationManager.AppSettings["_Bak_DatabaseName"]; //备份地址 private readonly string _bakPath = ConfigurationManager.AppSettings["_Bak_Path"]; //备份库名字 private readonly string _toBakName = ConfigurationManager.AppSettings["_Bak_ToBakName"]; //备份间隔时间 private readonly string _bakTimeType = ConfigurationManager.AppSettings["_Bak_Time"]; //需要还原的表名 private readonly string _databaseNameRestore = ConfigurationManager.AppSettings["_Restore_DatabaseName"]; //还原数据库地址 private readonly string _fromDisk = ConfigurationManager.AppSettings["_Restore_FromDisk"];
/// <summary> /// 数据库备份 /// </summary> /// <param name="dt">时间(备份文件名)</param> /// <param name="bakFileName">备份数据库文件名</param> public void DatabaseBak(DateTime dt, string bakFileName) { var connection = new SqlConnection(_connString); var sqlStr = @"USE [master];BACKUP DATABASE " + _databaseName + " TO DISK = '" + _bakPath + bakFileName + "' WITH INIT;"; var cmd = new SqlCommand(sqlStr, connection); try { connection.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { connection.Close(); connection.Dispose(); } }
/// <summary> /// 数据库还原 /// </summary> public void DatabaseRestore() { var connection = new SqlConnection(_connString); connection.Open(); //杀进程 var sqlKillProcess = @"select spid from sysprocesses,sysdatabases where sysprocesses.dbid=sysdatabases.dbid and sysdatabases.Name='" + _databaseNameRestore + "'"; var cmdKillDatabaseProcess = new SqlCommand(sqlKillProcess, connection); SqlDataReader dr; dr = cmdKillDatabaseProcess.ExecuteReader(); var list = new ArrayList(); while (dr.Read()) { list.Add(dr.GetInt16(0)); } dr.Close(); for (int i = 0; i < list.Count; i++) { cmdKillDatabaseProcess = new SqlCommand(string.Format(@"KILL {0}", list[i]), connection); cmdKillDatabaseProcess.ExecuteNonQuery(); } //开始还原 var sqlStr = @"use [master];RESTORE DATABASE " + _databaseNameRestore + " FROM DISK='" + _fromDisk + "' WITH REPLACE"; var cmd = new SqlCommand(sqlStr, connection); try { cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { connection.Close(); connection.Dispose(); } }
这是判断备份文件是否存在的代码:
备注:首先判断备份执行的间隔时间,即 每天备份一次,还是每月备份一次
public void BakBySetTime(DateTime dt) { var fileName = _toBakName; if (_bakTimeType.ToUpper() == "DAY") { fileName = fileName + "_" + dt.Year + "-" + dt.Month + "-" + dt.Day + ".bak"; } else if (_bakTimeType.ToUpper() == "MONTH") { fileName = fileName + "_" + dt.Year + "-" + dt.Month + ".bak"; } //判断文件路径是否存在 if (!Directory.Exists(_bakPath)) { Directory.CreateDirectory(_bakPath); //不存在就创建目录 } //判断文件是否存在 if (!File.Exists(_bakPath + fileName)) { //不存在,则备份 DatabaseBak(dt, fileName); } }
如果有好的建议或意见,欢迎吐槽
0 0
- ADO.NET 备份还原数据库
- ADO.NET数据库备份
- asp.net 还原、备份数据库
- NET备份还原SQL数据库
- ASP.NET备份还原数据库
- ASP.NET备份还原数据库
- ASP.NET备份还原数据库
- asp.net 备份还原数据库
- asp.net备份还原数据库
- .net下的数据库备份与还原
- 数据库备份与还原(ASP.NET)
- ASP.NET(C#)备份还原数据库
- ASP.NET数据库备份和还原
- 使用.net备份和还原数据库
- 备份/还原SqlServer数据库(.net版)
- ASP.NET数据库备份和还原
- ASP.NET中的数据库备份与还原
- asp.net(C#) 数据库备份还原 源码
- Sencha touch中Ext.data.Store获取json串中key值的方法
- SSD 之LBA和PBA
- 根文件系统制作的lib库必须添加的文件
- tomcat问题总结之-连接超时-maximum-active-time
- 分享下多年积累的对JAVA程序员成长之路的总结
- ADO.NET 备份还原数据库
- config机制
- 在Windows下用MinGW編譯miniupnp client
- vim 翻页功能快捷键
- LeakCanary:检测所有的内存泄漏
- Android 5.0——Material Design详解
- GRE作文备考素材——政治类
- 常用算法解析
- Android开发中StackOverflowError错误实例分析