• mvc项目中实现备份数据库(sqlserver2012)


    功能要求:mvc项目,实现数据库备份(bak文件)

    方法:

    1、新建类DatabaseMaintenance

      public class DatabaseMaintenance
       {
    
           #region 备份数据库
           /// <summary>  
            /// 备份数据库  
            /// </summary>  
            /// <param name="fileName">备份文件的路径</param>  
            public static void Backup(string fileName)
            {
                //TODO SQL Server only now  
                string sqlConnectionString = ConfigurationManager.ConnectionStrings["connStr"].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();
                }
            }
           #endregion
           
    
            #region 还原数据库
            /// <summary>  
            /// 还原数据库 database  
            /// </summary>  
            /// <param name="fileName">要还原的数据库文件路径</param>  
            public static void RestoreBackup(string fileName)
            {
                string sqlConnectionString = ConfigurationManager.ConnectionStrings["connStr"].ToString();
                using (SqlConnection conn = new SqlConnection(sqlConnectionString))
                {
                    string dbName = new SqlConnectionStringBuilder(sqlConnectionString).InitialCatalog;
                    string commandText = string.Format(
                        "DECLARE @ErrorMessage NVARCHAR(4000)
    " +
                        "USE master ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    " +
                        "BEGIN TRY
    " +
                            "RESTORE DATABASE [{0}] FROM DISK = '{1}' WITH REPLACE
    " +
                        "END TRY
    " +
                        "BEGIN CATCH
    " +
                            "SET @ErrorMessage = ERROR_MESSAGE()
    " +
                        "END CATCH
    " +
                        "ALTER DATABASE [{0}] SET MULTI_USER WITH ROLLBACK IMMEDIATE
    " +
                        "IF (@ErrorMessage is not NULL)
    " +
                        "BEGIN
    " +
                            "RAISERROR (@ErrorMessage, 16, 1)
    " +
                        "END",
                        dbName,
                        fileName);
    
                    DbCommand dbCommand = new SqlCommand(commandText, conn);
                    if (conn.State != ConnectionState.Open)
                        conn.Open();
                    dbCommand.ExecuteNonQuery();
                }
    
                //clear all pools  
                SqlConnection.ClearAllPools();
            }
            #endregion
    
    
           
        }

    PS:有位网友的方法 缺少红色标注部分,结果还原的时候一直报错,经过查找资料后 解决。

    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 "备份失败";  
               }  
           } 
    //删除数据库备份文件  
           public string DelDataBase(string id)  
           {  
               try  
               {  
                   string filepath=Server.MapPath("~/Data/"+id);  
                   System.IO.File.Delete(filepath);  
                   return "删除成功";  
               }  
               catch {  
                   return "删除失败";  
               }  
           }  

    PS:控制器的路径根据自己的需求而定。

    参考链接:点这里

    在此记录,仅供日后参考。

  • 相关阅读:
    电信生命周期说明
    find in linux 2 微信公众号
    GDB中应该知道的几个调试方法 2 微信公众号
    linux 下程序员专用搜索源码用来替代grep的软件ack(后来发现一个更快的: rg), 且有vim插件的 2 微信公众号
    linux下的 c 和 c++ 开发工具及linux内核开发工具 2 微信公众号
    linux下命令行发送邮件的软件:mutt 微信公众号
    腺样体肿大的综合治疗考虑 微信公众号
    打呼噜治疗方法 微信公众号
    vim 操作 2 微信公众号
    nginx之外的web 服务器caddy 微信公众号
  • 原文地址:https://www.cnblogs.com/WZH75171992/p/7250571.html
Copyright © 2020-2023  润新知