首页 > 数据库 >OSql命令操作函数(可用于安装程序的时候数据库脚本执行)

OSql命令操作函数(可用于安装程序的时候数据库脚本执行)

时间:2023-07-25 12:14:44浏览次数:54  
标签:string Parameters OSql 数据库 comm StartInfo 安装程序 new conn

/// <summary>
    /// OSql命令操作函数(可用于安装程序的时候数据库脚本执行)
    /// </summary>
    public class SqlScriptHelper
    {
        #region OSql操作函数

        /// <summary>
        /// 本地执行SQL脚本
        /// </summary>
        /// <param name="path">脚本文件路径全名</param>
        public static void DoSQL(string path)
        {
            string arguments = String.Format(" -E -S (local) -i \"{0}\"", path);
            RunDos("osql.exe", arguments, false);
        }

        /// <summary>
        /// 执行SQL脚本
        /// </summary>
        /// <param name="path">脚本文件路径全名</param>
        /// <param name="userID">数据库登录ID</param>
        /// <param name="password">数据库登录密码</param>
        /// <param name="server">数据库服务器地址</param>
        public static void DoSQL(string path, string userID, string password, string server)
        {
            // -U -P -S -i关键字区分大小写
            string arguments = String.Format(" -U {0} -P {1} -S {2} -i \"{3}\"", userID, password, server, path);

            RunDos("osql.exe", arguments, false);

            //			if(File.Exists(path))
            //			{
            //				File.Delete(path);
            //			}
        }

        /// <summary>
        /// 后台执行DOS文件
        /// </summary>
        /// <param name="fileName">文件名(包含路径)</param>
        /// <param name="argument">运行参数</param>
        /// <param name="hidden">是否隐藏窗口</param>
        public static void RunDos(string fileName, string argument, bool hidden)
        {
            Process process = new Process();
            process.EnableRaisingEvents = false;
            process.StartInfo.FileName = string.Format("\"{0}\"", fileName);
            process.StartInfo.Arguments = argument;
            if (hidden)
            {
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            }
            else
            {
                process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
            }
            process.Start();
            process.WaitForExit();
        }

        ///   <summary>   
        ///   运行指定DOS命令行   
        ///   </summary>   
        ///   <param name="cmd">命令</param>   
        ///   <param name="tempFolder">命令行参数</param>   
        ///   <param name="comfirm">写入命令行的确认信息</param>   
        ///   <param name="showWindow">是否显示窗口</param> 
        ///   <returns></returns>   
        private static string ExecuteCMD(string cmd, string arg, string comfirm, bool showWindow)
        {
            Process p = new Process();
            p.StartInfo.FileName = cmd;
            p.StartInfo.Arguments = arg;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;

            // 是否显示窗口
            p.StartInfo.CreateNoWindow = !showWindow;
            // 窗口状态
            if (showWindow)
            {
                p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
            }
            else
            {
                p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            }

            p.Start();
            if (comfirm != null)
                p.StandardInput.WriteLine(comfirm);
            string msg = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            p.Close();

            return msg;
        }

        /// <summary>
        /// 在运行脚本之前把脚本中的数据库名称替换成安装界面输入的数据库名称
        /// </summary>
        /// <param name="filePath">脚本文件名</param>
        /// <param name="oldDBName">原有的数据库名称</param>
        /// <param name="newDBName">新的数据库名称</param>
        public static void ReplaceDBName(string filePath, string oldDBName, string newDBName)
        {
            if (newDBName.CompareTo(oldDBName) != 0)
            {
                string fileText = string.Empty;
                using (StreamReader streamReader = new StreamReader(filePath, Encoding.Default))
                {
                    fileText = streamReader.ReadToEnd();
                    fileText = fileText.Replace(oldDBName, newDBName);
                }

                using (StreamWriter streamWriter = new StreamWriter(filePath, false, Encoding.Default))
                {
                    streamWriter.Write(fileText);
                }
            }
        }

        /// <summary>
        /// 为测试使用的函数
        /// </summary>
        /// <param name="fileText">输出的内容</param>
        private static void WriteLog(string fileText)
        {
            string filePath = "C:\\Log.txt";
            using (StreamWriter streamWriter = new StreamWriter(filePath, true, Encoding.Default))
            {
                streamWriter.Write(fileText);
            }
        }

        /// <summary>
        /// 加入安装文件的路径,方便Web端访问
        /// </summary>
        public static void UpdatePathEnvironment(string physicalRoot)
        {
            //得到原来Path的变量值
            string registerKey = "SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment";
            string key = "Path";
            RegistryKey regKey = Registry.LocalMachine.OpenSubKey(registerKey);
            string result = regKey.GetValue(key).ToString();

            //添加新的值
            if (result.IndexOf(physicalRoot) < 0)
            {
                result += string.Format(";{0}", physicalRoot);
            }

            regKey = Registry.LocalMachine.OpenSubKey(registerKey, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.SetValue);
            regKey.SetValue(key, result);
        }

        #endregion

        #region 附加、分离、备份、恢复数据库操作

        /// <summary>
        /// 附加SqlServer数据库
        /// </summary>
        public bool AttachDB(string connectionString, string dataBaseName, string dataBase_MDF, string dataBase_LDF)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandText = "sp_attach_db";
                comm.Parameters.Add(new SqlParameter("dbname", SqlDbType.NVarChar));
                comm.Parameters["dbname"].Value = dataBaseName;
                comm.Parameters.Add(new SqlParameter("filename1", SqlDbType.NVarChar));
                comm.Parameters["filename1"].Value = dataBase_MDF;
                comm.Parameters.Add(new SqlParameter("filename2", SqlDbType.NVarChar));
                comm.Parameters["filename2"].Value = dataBase_LDF;
                comm.CommandType = CommandType.StoredProcedure;
                comm.ExecuteNonQuery();
            }

            return true;
        }

        /// <summary>
        /// 分离SqlServer数据库
        /// </summary>
        public bool DetachDB(string connectionString, string dataBaseName)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandText = "sp_detach_db";
                comm.Parameters.Add(new SqlParameter("dbname", SqlDbType.NVarChar));
                comm.Parameters["dbname"].Value = dataBaseName;
                comm.CommandType = CommandType.StoredProcedure;
                comm.ExecuteNonQuery();
            }
            return true;
        }

        /// <summary>
        /// 还原数据库
        /// </summary>
        public bool RestoreDataBase(string connectionString, string dataBaseName, string DataBaseOfBackupPath, string DataBaseOfBackupName)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandText = "use master;restore database @DataBaseName From disk = @BackupFile with replace;";
                comm.Parameters.Add(new SqlParameter("DataBaseName", SqlDbType.NVarChar));
                comm.Parameters["DataBaseName"].Value = dataBaseName;
                comm.Parameters.Add(new SqlParameter("BackupFile", SqlDbType.NVarChar));
                comm.Parameters["BackupFile"].Value = Path.Combine(DataBaseOfBackupPath, DataBaseOfBackupName);
                comm.CommandType = CommandType.Text;
                comm.ExecuteNonQuery();
            }
            return true;
        }

        /// <summary>
        /// 备份SqlServer数据库
        /// </summary>
        public bool BackupDataBase(string connectionString, string dataBaseName, string DataBaseOfBackupPath, string DataBaseOfBackupName)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandText = "use master;backup database @dbname to disk = @backupname;";
                comm.Parameters.Add(new SqlParameter("dbname", SqlDbType.NVarChar));
                comm.Parameters["dbname"].Value = dataBaseName;
                comm.Parameters.Add(new SqlParameter("backupname", SqlDbType.NVarChar));
                comm.Parameters["backupname"].Value = Path.Combine(DataBaseOfBackupPath, DataBaseOfBackupName);
                comm.CommandType = CommandType.Text;
                comm.ExecuteNonQuery();
            }
            return true;
        } 

        #endregion

    }

  

标签:string,Parameters,OSql,数据库,comm,StartInfo,安装程序,new,conn
From: https://www.cnblogs.com/liao-long/p/17579539.html

相关文章

  • models数据库创建
    fromdjango.dbimportmodels#Createyourmodelshere.classUserInfo(models.Model):name=models.CharField(verbose_name="姓名",max_length=20)pwd=models.CharField(verbose_name="密码",max_length=20)phone=models.CharField(verbose_na......
  • SQL 语句获取数据库各表分配空间、占用空间、记录行数
    SELECT    t.NAME AS TableName,    s.Name AS SchemaName,    p.rows AS RowCounts,    SUM(a.total_pages)*8 AS TotalSpaceKB,    CAST(ROUND(((SUM(a.total_pages)*8)/1024.00),2) AS NUMERIC(36,2)) AS TotalSpaceMB,    SUM(a.......
  • oracle数据库临时表空间损坏,报错ORA-01116,ORA-01110 ,ORA-27041,ORA-06512的解决方式
     打脚本的时候报错:ORA-01116:打开数据库文件203时出错ORA-01110:数据文件203:'/u01/app/oracle/oradata/temp02.dbf'ORA-27041:无法打开文件Linux-x86_64Error:2:NosuchfileordirectoryAdditionalinformation:3ORA-06512:在line9  是我们环境的临时表空间......
  • 数据库之常用查询、伪表
    --升序SELECT*FROMempORDERBYsalASC;--降序SELECT*FROMempORDERBYsalDESC;--输出comm字段为null的记录SELECT*FROMempWHEREcommISNULL;--输出comm字段不为null的记录SELECT*FROMempWHEREcommISNOTNULL;--统计emp表中总数、薪水......
  • CentOS 7 安装达梦数据库
    环境说明CentOS的版本:CentOS7.92009达梦数据库的版本:达梦8SSH工具:MobaXterm(最新版本即可)初始化配置1、下载达梦安装包达梦数据库官网提供了开发版的下载包,我们下载对应版本即可。官网地址:https://eco.dameng.com/download/2、创建用户和组#创建组[root@localhost~]#groupad......
  • SAP常用数据库包括哪些?
    SAP系统涉及到各种数据,而这些数据需要存储在某些数据库中。那么SAP系统中存储什么类型的数据?这些数据存储在哪些数据库中?了解这些信息,可以更好地理解SAP系统的运作方式。SAP系统中常见的数据:客户(Customer)和供应商(Vendor)数据:这些数据包含有关公司的客户和供应商的详细信息,例如他们的......
  • 介绍了Oracle数据库锁的种类及研究
    介绍了Oracle数据库锁的种类及研究作者:佚名本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的现象,提出了相应的......
  • redis数据库框架 从入门到精通进阶学习路线?深入细化讲解
    redis数据库框架从入门到精通进阶学习路线?深入细化讲解Redis是一个高性能的开源键值对数据库,具备丰富的功能和灵活的应用场景。以下是一个更加深入细化讲解的Redis学习路线,从入门到精通的进阶学习:1.入门篇:-学习Redis的基本概念和特点,了解其与传统关系型数据库的区别-安装和......
  • 云原生数据库--多租户
    本篇文章来简单聊聊云原生数据库的多租户,这也是看到最近TiDB的7.2版本新的feature支持的特性,其中它们也考虑了多种场景下对多租户的支持。同时,我现在在百度做GaiaDB云原生数据库,其中一个PS组件也是多租户部署的,但是这两个多租户的概念却千差万别,这也成为了写本篇文章的......
  • 可扩展的分布式数据库架构 vs 传统关系数据库
    可扩展的分布式数据库架构本文发表在《程序员》杂志2010年第6期引言数据库的可用性和扩展性一直是数据库厂商和用户最关注的问题。过去我们采用高端的设备,比如使用小型机和大型存储来保证数据库的可用性。而扩展性主要采用向上扩展(Scaleup)的方式,通过增加CPU,内存,磁盘等方式......