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腳本,同時執行多個創建

第二種:通過循環,先導入一個表結構及數據后再導入另一個(一個一個獲取)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM