zoukankan      html  css  js  c++  java
  • C#通过读取Mysql脚本创建数据库

    #region script helper
    private bool ExecuteScriptFile(string pathToScriptFile, out string errorMsg)
    {
        StreamReader reader = null;
        DbConnection connection = null;
    
        string strSql;
        string applicationPath = Request.ApplicationPath;
        using (reader = new StreamReader(pathToScriptFile))
        {
        using (connection = new MySqlConnection(GetConnectionString()))
        {
            DbCommand dbCmd = connection.CreateCommand();
            dbCmd.Connection = connection;
            dbCmd.CommandType = CommandType.Text;
            dbCmd.CommandTimeout = 360;
    
            // 考虑到安装脚本可能比较大,将命令超时时间设为6分钟
            connection.Open();
    
            while (!reader.EndOfStream)
            {
            try
            {
                strSql = NextSqlFromStream(reader);
    
                if (!string.IsNullOrEmpty(strSql))
                {
                dbCmd.CommandText = strSql.Replace("$VirsualPath$", applicationPath);
                dbCmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
    
            }
    
            connection.Close();
        }
    
        reader.Close();
        }
    
        errorMsg = null;
        return true;
    }
    
    private static string NextSqlFromStream(StreamReader reader)
    {
        StringBuilder sb = new StringBuilder();
        string lineOfText = reader.ReadLine().Trim();
    
        while (!reader.EndOfStream && string.Compare(lineOfText, "GO", true, CultureInfo.InvariantCulture) != 0)
        {
        sb.Append(lineOfText + Environment.NewLine);
        lineOfText = reader.ReadLine();
        }
    
        // 如果最后一句不是GO,添加最后一句
        if (string.Compare(lineOfText, "GO", true, CultureInfo.InvariantCulture) != 0)
        sb.Append(lineOfText + Environment.NewLine);
    
        return sb.ToString();
    }
    #endregion
            /// <summary> 
            /// 执行Sql文件 
            /// </summary> 
            /// <param name="varFileName">sql文件</param> 
            /// <param name="Conn">连接字符串</param> 
            /// <returns></returns> 
            private bool ExecuteSqlFile(string varFileName, String Conn)
            {
                using (StreamReader reader = new StreamReader(varFileName, System.Text.Encoding.GetEncoding("utf-8")))
                {
                    MySqlCommand command;
                    MySqlConnection Connection = new MySqlConnection(Conn);
                    Connection.Open();
                    try
                    {
                        string line = "";
                        string l;
                        while (true)
                        {
                            // 如果line被使用,则设为空
                            if (line.EndsWith(";"))
                                line = "";
     
                            l = reader.ReadLine();
     
                            // 如果到了最后一行,则退出循环
                            if (l == null) break;
                            // 去除空格
                            l = l.TrimEnd();
                            // 如果是空行,则跳出循环
                            if (l == "") continue;
                            // 如果是注释,则跳出循环
                            if (l.StartsWith("--")) continue;
     
                            // 行数加1 
                            line += l;
                            // 如果不是完整的一条语句,则继续读取
                            if (!line.EndsWith(";")) continue;                       
                            if (line.StartsWith("/*!"))
                            {
                                continue;
                            }
     
                            //执行当前行
                            command = new MySqlCommand(line, Connection);
                            command.ExecuteNonQuery();
                        }
                    }
                    finally
                    {
                        Connection.Close();
                    }
                }
     
                return true; 
            }

    以上两种方法通过测试都可以实现。

    第一种:先整个读取mysql脚本,同时执行多个创建

    第二种:通过循环,先导入一个表结构及数据后再导入另一个(一个一个获取)

  • 相关阅读:
    [LeetCode] Power of Three 判断3的次方数
    [LeetCode] 322. Coin Change 硬币找零
    [LeetCode] 321. Create Maximum Number 创建最大数
    ITK 3.20.1 VS2010 Configuration 配置
    VTK 5.10.1 VS2010 Configuration 配置
    FLTK 1.3.3 MinGW 4.9.1 Configuration 配置
    FLTK 1.1.10 VS2010 Configuration 配置
    Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别
    [LeetCode] Bulb Switcher 灯泡开关
    [LeetCode] Maximum Product of Word Lengths 单词长度的最大积
  • 原文地址:https://www.cnblogs.com/Duriyya/p/10495180.html
Copyright © 2011-2022 走看看