首页 > 数据库 >C# SQLSERVER 自动备份

C# SQLSERVER 自动备份

时间:2024-04-08 14:47:19浏览次数:18  
标签:string C# res 备份 cmd SQLSERVER new kid con

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,200),
            new SqlParameter("@dbFullName",SqlDbType.NVarChar,200),
        };
                    parameters[0].Value = dbname;
                    parameters[1].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,200),
                new SqlParameter("@dbFullName",SqlDbType.NVarChar,200),
            };
                    parameters[0].Value = dbname;
                    parameters[1].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 -1;
            }
            return res;
        }
    }

 

标签:string,C#,res,备份,cmd,SQLSERVER,new,kid,con
From: https://www.cnblogs.com/linyijia/p/18121096

相关文章

  • CAD加密的原理和步骤是什么?
    在当今的工业设计领域,CAD(计算机辅助设计)文件是绝对不可或缺的。然而,如何对这些CAD文件进行高效且安全的加密,以防止公司核心信息的泄露呢?接下来,我们将为您介绍CAD文件加密的原理以及具体实施步骤。首要的原理就是基于进程加密。对于企业而言,选择一个能够广泛支持各类应用进程的加......
  • 「Mac」gitlab 更新了登录密码后,本地git仓库拉取推送等无法操作,提示无权限了 —— 解
    ​起因:公司git账户与oa账号关联,oa密码修改了,导致git远程密码修改了,本地的项目再做拉取推送时发现拉取不下来了解决办法:1、查看本地git配置cat.gitconfig2、删除git本地信息nano.gitconfig3、Mac应用程序钥匙串访问,找到对应git项,将其删除4、重新配置一下git邮箱、用......
  • Docker部署xxl-job
    官方文档:https://www.xuxueli.com/xxl-job/#《分布式任务调度平台XXL-JOB》参考文档:https://www.jianshu.com/p/c47a405e98c4安装正常情况下,mysql的账号和密码如果和xxl-job上面的密码是一样的话,直接使用官方文档命令行即可:dockerrun-p8080:8080-v/tmp:/data/applogs--n......
  • BOSHIDA DC电源模块的调试和故障排除技巧
    BOSHIDADC电源模块的调试和故障排除技巧下面是DC电源模块调试和故障排除的一些技巧: 1.确保输入电源稳定:首先要确保输入电源的稳定性,使用稳压器、滤波器等装置来保持输入电压的稳定。2.检查输出电压:使用万用表或示波器检查输出电压是否达到预期值。如果输出电压不正常,可能......
  • H3C S3600 交换机配置SSH登录
    S3600这款交换机比较旧了,版本为V3生成服务器端的RSA和DSA密钥对时完成SSH登录的必要操作#生成RSA和DSA密钥对。[Switch]public-keylocalcreatersa[Switch]public-keylocalcreatedsa#设置用户接口上的认证模式为AAA认证。[Switch]user-interfacevty04[Switch-......
  • CondeseNetV2:清华与华为出品,保持特征的新鲜是特征复用的关键 | CVPR 2021
    论文提出SFR模块,直接重新激活一组浅层特征来提升其在后续层的复用效率,而且整个重激活模式可端到端学习。由于重激活的稀疏性,额外引入的计算量非常小。从实验结果来看,基于SFR模块提出的CondeseNetV2性能还是很不错的,值得学习 来源:晓飞的算法工程笔记公众号论文:CondenseNet......
  • Windows下安装配置WinPcap
    winpcap官网:http://www.winpcap.org/1.首先下载安装winpcap.exe,http://www.winpcap.org/install/default.htm目的是安装相关驱动和dll,安装完成之后基于winpcap的应用程序才能够正常运行。2.下载winpcap的开发包,头问文件和库文件:http://www.winpcap.org/devel.htm 解压之后主......
  • Windows下配置使用WinPcap
     0、前提   windows:win7x64   WinPcap版本:4.1.3   WinPcap开发包:4.1.2   目标:在VS2010中配置使用winpcap获取目标计算机中安装的网卡列表 1、下载   http://www.winpcap.org/下载winpcap安装包和开发包安装包安装完毕后,解压开发包到某个......
  • go reflect
    goreflect反射核心反射的核心是两个对象,分别是reflect.Type和reflect.Value。它们分别代表了go语言中的类型和值。我们可以通过reflect.TypeOf和reflect.ValueOf来获取到一个变量的类型和值。funcmain(){ vara=1 fmt.Println(reflect.ValueOf(a)) fmt.Print......
  • Chrome浏览器前端开发调试时强制更新js、css静态资源文件缓存的方法
    以Chrome浏览器为例,国产浏览器未做全面测试。前端开发静态文件时,浏览器访问会缓存样式、图片、js等,怎么快速更新缓存。以下方法特别适合只想清除某个网页的缓存,而不想清除全部浏览器缓存可以采用以下方法。一、强制刷新同时按住ctrl+f5或ctrl+shift+r进行访问页面强制刷新,一般......