功能要求:mvc项目,实现数据库备份(bak文件)
实现步骤:<a id="backupDB" href="javascript:" >数据库备份</a>
方法:1、新建类DatabaseMaintenance
/// <summary> /// 数据库维护 /// </summary> public class DatabaseMaintenance { /// <summary> /// 备份数据库 /// </summary> /// <param name="fileName">备份文件的路径</param> public static void Backup(string fileName) { //TODO SQL Server only now string sqlConnectionString = ConfigurationManager.ConnectionStrings["HelpStoreContext"].ToString(); using (SqlConnection conn = new SqlConnection(sqlConnectionString)) { string dbName = new SqlConnectionStringBuilder(sqlConnectionString).InitialCatalog; string commandText = string.Format( "BACKUP DATABASE [{0}] TO DISK = '{1}' WITH FORMAT", dbName, fileName); DbCommand dbCommand = new SqlCommand(commandText, conn); if (conn.State != ConnectionState.Open) conn.Open(); dbCommand.ExecuteNonQuery(); } } /// <summary> /// 还原数据库 database /// </summary> /// <param name="fileName">要还原的数据库文件路径</param> public static void RestoreBackup(string fileName) { string sqlConnectionString = ConfigurationManager.AppSettings["HelpStoreContext"]; using (SqlConnection conn = new SqlConnection(sqlConnectionString)) { string dbName = new SqlConnectionStringBuilder(sqlConnectionString).InitialCatalog; string commandText = string.Format( "DECLARE @ErrorMessage NVARCHAR(4000)\n" + "ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE\n" + "BEGIN TRY\n" + "RESTORE DATABASE [{0}] FROM DISK = '{1}' WITH REPLACE\n" + "END TRY\n" + "BEGIN CATCH\n" + "SET @ErrorMessage = ERROR_MESSAGE()\n" + "END CATCH\n" + "ALTER DATABASE [{0}] SET MULTI_USER WITH ROLLBACK IMMEDIATE\n" + "IF (@ErrorMessage is not NULL)\n" + "BEGIN\n" + "RAISERROR (@ErrorMessage, 16, 1)\n" + "END", dbName, fileName); DbCommand dbCommand = new SqlCommand(commandText, conn); if (conn.State != ConnectionState.Open) conn.Open(); dbCommand.ExecuteNonQuery(); } //clear all pools SqlConnection.ClearAllPools(); } }
2、在控制器里调用方法
//备份数据库 public string BackupData() { try { var dname = DateTime.Now.Ticks; string filename = Server.MapPath("~/Data/" + dname + ".bak"); if (!System.IO.File.Exists(filename)) { System.IO.File.Create(filename); } DatabaseMaintenance.Backup(filename); return "备份成功"; } catch { return "备份失败"; } }
3、删除已经备份的数据库bak文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | //删除数据库备份文件 public string DelDataBase( string id) { try { string filepath=Server.MapPath( "~/Data/" +id); System.IO.File.Delete(filepath); return "删除成功" ; } catch { return "删除失败" ; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· .NET 阻止Windows关机以及阻止失败的一些原因
· 博客园2025新款「AI繁忙」系列T恤上架
· Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· C# LINQ 快速入门实战指南,建议收藏学习!