应客户需求,要求实现一个版本一键升级的功能,咨询过同事之后弄了个demo出来,后台代码如下:

  //DBConnModelInfo:连接字符串的对象 (包含数据库实例名,数据库名,登陆名,登陆密码)

  public bool DBVersionSaveData(DBConnModelInfo mdl)
        {
            bool result = false;

try
            {
                int timeout = 60000; //设置执行超时时间,单位毫秒
                string prversion = WebConfig.Version;//程序版本
                string dbversion = new BSystemParameter().GetDBVersion();//数据库版本
                
                //升级脚本的物理路径
                string root = "DataBase\\Update";
                string folder = prversion;
                string rootpath = Path.Combine(root, folder);
                string dirpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, rootpath);

string filepath = Path.Combine(dirpath, "Update.sql");//升级脚本
                string logpath = Path.Combine(dirpath, "Update.txt");//存放执行结果
                string destfilename = string.Format("Update_{0}.sql", mdl.InitialCatalog);//要执行升级的脚本(升级脚本的副本,不改变原升级脚本)
                string destfilepath = Path.Combine(dirpath, destfilename);

if (System.IO.File.Exists(destfilepath))
                {
                    Tools.DeleteFile(@destfilepath);//删除文件
                }
                //将升级脚本的内容复制到副本
                if (!System.IO.File.Exists(destfilepath))
                {
                    using (StreamWriter sw = new StreamWriter(destfilepath, true, Encoding.Unicode))
                    {
                        sw.WriteLine(string.Format("Use [{0}]", mdl.InitialCatalog));//mdl.InitialCatalog 数据库名
                        sw.WriteLine("Go");

string[] rals = System.IO.File.ReadAllLines(@filepath);
                        foreach (string s in rals)
                        {
                            sw.WriteLine(s);
                        }
                    }
                }
                //执行升级脚本
                if (System.IO.File.Exists(destfilepath))
                {
                    Process p = new Process();
                    p.StartInfo.FileName = "osql.exe"; //执行脚本的方式
                    /* -S:数据库实例名  -U:登录名 -P:密码 -i:升级的脚本路径 -o:执行后结果存放路径  */
                    string args = string.Format(@"-S {0}  -U {1} -P {2} -i ""{3}"" -o ""{4}""", mdl.DataSource, mdl.UserID, mdl.Password, destfilepath, logpath);
                    p.StartInfo.Arguments = args;
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.CreateNoWindow = true;
                    p.Start();
                    p.WaitForExit(timeout);
                    p.Close();

result = true;
                }                
            }
            catch (Exception ex)
            {
                Tools.Log(this.GetType().Name, new StackFrame(1).GetMethod().Name, ex);//错误日志
                result = false;
            }
            
            return result;
        }

asp.net 版本一键升级,后台直接调用升级脚本的更多相关文章

  1. ASP.NET前台JS与后台CS函数如何互相调用

    摘要: 在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况.今天就把比较实用的前后台相互调用的方法总结出来和大家分享. 在实际的Web开发中,我们可能会常常遇到 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  5. ASP.NET MVC搭建项目后台UI框架—2、菜单特效

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  6. ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  8. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  9. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

随机推荐

  1. python_数据分析_正态分布

    Kolmogorov-Smirnov 与 Shapiro-Wilk 模型正态分布检验 Spss stata R语言正态分布 install.packages("nortest") ...

  2. [TCP/IP] TCP第三次握手失败怎么办

    三次握手 客户端 ==> SYN是1同步 ,ACK确认标志是0,seq序号是x ==> 服务器 客户端 <== SYN是1同步 ,ACK确认标志是1,seq序号是y,ack确认号是x ...

  3. 快速、优雅的前端IDE之H-builder-X

    为什么介绍的是HBuidler-X而不是Hbuilder   HX是全新的一个软件,它抛弃了eclipse架构,使用C++为基础架构.HX目前还不能完全替代HBuilder.但在markdown记事的 ...

  4. JS高阶---继承模式(借用构造函数继承+组合继承)

    (1)借用构造函数继承 案例如下: 验证: (2)组合继承 案例如下: 验证如下: 结果如右图所示 . .

  5. windows 7系统下查看被占用的端口并解除占用

    运行输入cmd,在命令行输入 netstat -ano 查找所占用端口所在的行,如图本例子被占用端口为9999,记住对应的pid 然后输入 tasklist|findstr pid(此处为9528) ...

  6. Nacos 知识点

    Nacos 名字的由来(取红色的英文字符): Dynamic Naming and Configuration Service Nacos 是 Spring Cloud Alibaba 的一个组件,详 ...

  7. Vue.js如何获得兄弟元素,子元素,父元素(DOM操作)

    我不是代码的生产者,我只是知识的搬运工. 戳这

  8. 论文阅读笔记六十:Squeeze-and-Excitation Networks(SENet CVPR2017)

    论文原址:https://arxiv.org/abs/1709.01507 github:https://github.com/hujie-frank/SENet 摘要 卷积网络的关键构件是卷积操作, ...

  9. Excel-数据透视表

    例如: 购买数量采用求和的方式 用户数ID数据采用计数的方式 一.数据透视表的结构 二.数据透视表的步骤 1.订单表 提出问题,理解数据,数据清晰,构建模型,数据可视化 问题1:每个客户的订单量? 问 ...

  10. 2.GO-可变参数函数、匿名函数和函数变量

    2.1.可变参数函数 可变参数指参数的个数可以是任意个 可变参数必须在参数列表最后的位置,在参数名和类型之间添加三个点表示可变参数函数 声明函数时,在函数体把可变参数当作切片使用即可 package ...