示例#1
0
文件: Program.cs 项目: mymvp/xlsx2lua
    static void Main(string[] args)
    {
        // 读取本工具所在路径下的config配置文件
        string errorString    = null;
        string configFilePath = Utils.CombinePath(AppValues.PROGRAM_FOLDER_PATH, AppValues.CONFIG_FILE_NAME);

        AppValues.ConfigData = TxtConfigReader.ParseTxtConfigFile(configFilePath, ":", out errorString);
        if (!string.IsNullOrEmpty(errorString))
        {
            Utils.LogErrorAndExit(errorString);
        }

        // 检查填写的Excel导出目录是否存在
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_EXPORT_EXCEL_PATH))
        {
            AppValues.ExportExcelPath = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_EXPORT_EXCEL_PATH].Trim();
            if (!Directory.Exists(AppValues.ExportExcelPath))
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的导出Excel文件的存放目录不存在,你填写的为\"{0}\"", AppValues.ExportExcelPath));
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("未在config配置文件中以名为\"{0}\"的key声明导出Excel文件的存放目录", AppValues.APP_CONFIG_KEY_EXPORT_EXCEL_PATH));
        }

        // 获取设置的Excel文件中列的最大宽度
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_EXCEL_COLUMN_MAX_WIDTH))
        {
            double inputExcelColumnMaxWidth = -1;
            string inputParam = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_EXCEL_COLUMN_MAX_WIDTH];
            if (double.TryParse(inputParam, out inputExcelColumnMaxWidth) == true)
            {
                if (inputExcelColumnMaxWidth > 0)
                {
                    AppValues.ExcelColumnMaxWidth = inputExcelColumnMaxWidth;
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("config配置文件中声明的Excel文件中列的最大宽度非法,必须大于0,你输入的为\"{0}\"", inputParam));
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的Excel文件中列的最大宽度不是一个合法数字,你输入的为\"{0}\"", inputParam));
            }
        }
        else
        {
            Utils.LogWarning(string.Format("警告:未在config配置文件中以名为\"{0}\"的key声明生成的Excel文件中列的最大宽度,本工具将不对生成的Excel文件进行美化", AppValues.APP_CONFIG_KEY_EXCEL_COLUMN_MAX_WIDTH));
        }

        const int COLOR_INDEX_MIN = 0;
        const int COLOR_INDEX_MAX = 56;

        // 获取设置的每列背景色,如果进行了设置需检查ColorIndex是否正确
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_COLUMN_BACKGROUND_COLOR))
        {
            AppValues.ColumnBackgroundColorIndex = new List <int>();
            string inputParam = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_COLUMN_BACKGROUND_COLOR];

            string[] colorIndexString = inputParam.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            if (colorIndexString.Length > 0)
            {
                foreach (string oneColorIndexString in colorIndexString)
                {
                    int oneColorIndex = -1;
                    if (int.TryParse(oneColorIndexString, out oneColorIndex) == true)
                    {
                        if (oneColorIndex >= COLOR_INDEX_MIN && oneColorIndex <= COLOR_INDEX_MAX)
                        {
                            AppValues.ColumnBackgroundColorIndex.Add(oneColorIndex);
                        }
                        else
                        {
                            Utils.LogErrorAndExit(string.Format("config配置文件中声明的颜色索引值\"{0}\"非法,必须介于{1}到{2}之间", oneColorIndex, COLOR_INDEX_MIN, COLOR_INDEX_MAX));
                        }
                    }
                    else
                    {
                        Utils.LogErrorAndExit(string.Format("config配置文件中声明的颜色索引值\"{0}\"不是一个合法数字", oneColorIndexString));
                    }
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中以名为\"{0}\"的key声明各列背景色不允许为空", AppValues.APP_CONFIG_KEY_COLUMN_BACKGROUND_COLOR));
            }
        }

        // 获取设置的data、config两张Sheet表的标签按钮颜色
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_DATA_SHEET_TAB_COLOR))
        {
            string colorIndexString = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_DATA_SHEET_TAB_COLOR];
            int    colorIndex       = -1;
            if (int.TryParse(colorIndexString, out colorIndex) == true)
            {
                if (colorIndex >= COLOR_INDEX_MIN && colorIndex <= COLOR_INDEX_MAX)
                {
                    AppValues.DataSheetTabColorIndex = colorIndex;
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("config配置文件中声明的data表标签按钮颜色索引值\"{0}\"非法,必须介于{1}到{2}之间", colorIndex, COLOR_INDEX_MIN, COLOR_INDEX_MAX));
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的data表标签按钮颜色索引值\"{0}\"不是一个合法数字", colorIndexString));
            }
        }
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_CONFIG_SHEET_TAB_COLOR))
        {
            string colorIndexString = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_CONFIG_SHEET_TAB_COLOR];
            int    colorIndex       = -1;
            if (int.TryParse(colorIndexString, out colorIndex) == true)
            {
                if (colorIndex >= COLOR_INDEX_MIN && colorIndex <= COLOR_INDEX_MAX)
                {
                    AppValues.ConfigSheetTabColorIndex = colorIndex;
                }
                else
                {
                    Utils.LogErrorAndExit(string.Format("config配置文件中声明的config表标签按钮颜色索引值\"{0}\"非法,必须介于{1}到{2}之间", colorIndex, COLOR_INDEX_MIN, COLOR_INDEX_MAX));
                }
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中声明的config表标签按钮颜色索引值\"{0}\"不是一个合法数字", colorIndexString));
            }
        }

        // 获取要导出的数据表名
        List <string> exportTableName = new List <string>();

        // 在这里自定义获取要导出的数据表名的方法(这里以在config.txt中进行配置为例,还可以采用类似表名特殊前缀标识等方式实现)
        if (AppValues.ConfigData.ContainsKey(AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES))
        {
            string exportTableNameString = AppValues.ConfigData[AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES].Trim();
            if (string.IsNullOrEmpty(exportTableNameString))
            {
                Utils.LogErrorAndExit(string.Format("config配置文件中以名为\"{0}\"的key声明要导出的数据表名不允许为空", AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES));
            }
            else
            {
                string[] tableNames = exportTableNameString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string tableName in tableNames)
                {
                    exportTableName.Add(tableName.Trim());
                }
            }
        }
        else
        {
            Utils.LogErrorAndExit(string.Format("未在config配置文件中以名为\"{0}\"的key声明要导出的数据表名", AppValues.APP_CONFIG_KEY_EXPORT_DATA_TABLE_NAMES));
        }

        // 连接MySQL数据库
        MySQLOperateHelper.ConnectToDatabase(out errorString);
        if (!string.IsNullOrEmpty(errorString))
        {
            Utils.LogErrorAndExit(string.Format("无法连接到MySQL数据库,{0}", errorString));
        }

        // 检查声明的要导出的数据库表格是否存在,若存在导出到Excel
        foreach (string tableName in exportTableName)
        {
            if (MySQLOperateHelper.ExistTableNames.Contains(tableName))
            {
                Utils.Log(string.Format("导出数据表{0}:", tableName));
                ExcelOperateHelper.ExportToExcel(tableName);
                Utils.Log("成功");
            }
            else
            {
                Utils.LogErrorAndExit(string.Format("\n错误:数据库中不存在名为{0}的数据表,请检查配置中声明的导出数据表名与数据库是否对应", tableName));
            }
        }

        Utils.Log("\n按任意键退出本工具");
        Console.ReadKey();
    }
示例#2
0
        private void btnCompare_Click(object sender, EventArgs e)
        {
            rtxResult.Text = string.Empty;
            string errorString = null;

            // 检查新旧数据库连接字符串是否输入
            AppValues.ConnectStringForOldDatabase = txtOldConnString.Text.Trim();
            AppValues.ConnectStringForNewDatabase = txtNewConnString.Text.Trim();
            if (string.IsNullOrEmpty(AppValues.ConnectStringForOldDatabase))
            {
                MessageBox.Show("必须输入旧版数据库连接字符串", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (string.IsNullOrEmpty(AppValues.ConnectStringForNewDatabase))
            {
                MessageBox.Show("必须输入新版数据库连接字符串", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (AppValues.ConnectStringForOldDatabase.Equals(AppValues.ConnectStringForNewDatabase))
            {
                MessageBox.Show("输入的新旧两数据库连接字符串重复", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // 检查配置文件
            AppValues.ConfigFilePath = txtConfigPath.Text.Trim();
            if (string.IsNullOrEmpty(AppValues.ConfigFilePath))
            {
                DialogResult dialogResult = MessageBox.Show("未指定配置文件,本工具将默认比较两数据库中所有表格的结构和数据,确定要这样做吗?\n\n点击“是”进行默认比较,点击“否”放弃", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dialogResult == DialogResult.No)
                {
                    return;
                }
                else
                {
                    AppValues.AllTableCompareRule = new Dictionary <string, TableCompareRule>();
                }
            }
            else
            {
                Utils.AppendOutputText("读取配置文件:", OutputType.Comment);
                AppValues.AllTableCompareRule = ConfigReader.LoadConfig(AppValues.ConfigFilePath, out errorString);
                if (!string.IsNullOrEmpty(errorString))
                {
                    MessageBox.Show(string.Concat("配置文件中存在以下错误,请修正后重试:\n\n", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                else
                {
                    Utils.AppendOutputText("成功\n", OutputType.None);
                }
            }
            // 连接两数据库
            Utils.AppendOutputText("连接旧版数据库:", OutputType.Comment);
            MySQLOperateHelper.ConnectToDatabase(AppValues.ConnectStringForOldDatabase, out AppValues.OldConn, out AppValues.OldSchemaName, out AppValues.OldExistTableNames, out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                MessageBox.Show(string.Concat("连接旧版数据库失败,错误原因为:", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                Utils.AppendOutputText("成功\n", OutputType.None);
            }

            Utils.AppendOutputText("连接新版数据库:", OutputType.Comment);
            MySQLOperateHelper.ConnectToDatabase(AppValues.ConnectStringForNewDatabase, out AppValues.NewConn, out AppValues.NewSchemaName, out AppValues.NewExistTableNames, out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                MessageBox.Show(string.Concat("连接新版数据库失败,错误原因为:", errorString), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                Utils.AppendOutputText("成功\n", OutputType.None);
            }

            // 整理数据库结构信息
            Utils.AppendOutputText("分析旧版数据库表结构:", OutputType.Comment);
            AppValues.OldTableInfo = new Dictionary <string, TableInfo>();
            foreach (string tableName in AppValues.OldExistTableNames)
            {
                TableInfo tableInfo = MySQLOperateHelper.GetTableInfo(AppValues.OldSchemaName, tableName, AppValues.OldConn);
                AppValues.OldTableInfo.Add(tableName, tableInfo);
            }
            Utils.AppendOutputText("成功\n", OutputType.None);

            Utils.AppendOutputText("分析新版数据库表结构:", OutputType.Comment);
            AppValues.NewTableInfo = new Dictionary <string, TableInfo>();
            foreach (string tableName in AppValues.NewExistTableNames)
            {
                TableInfo tableInfo = MySQLOperateHelper.GetTableInfo(AppValues.NewSchemaName, tableName, AppValues.NewConn);
                AppValues.NewTableInfo.Add(tableName, tableInfo);
            }
            Utils.AppendOutputText("成功\n", OutputType.None);

            Utils.AppendOutputText("\n", OutputType.None);
            // 进行对比,并展示结果
            MySQLOperateHelper.CompareAndShowResult(out errorString);
            if (!string.IsNullOrEmpty(errorString))
            {
                string tips = string.Concat("对比中发现以下问题,请修正后重新进行比较:\n\n", errorString);
                MessageBox.Show(tips, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                Utils.AppendOutputText("\n", OutputType.Comment);
                Utils.AppendOutputText("对比完毕", OutputType.Comment);
            }
        }