using MySql.Data.MySqlClient; using System; using System.Data; using System.Windows.Forms; using OfficeOpenXml; using OfficeOpenXml.Style; using System.IO; namespace AdbRecordCompare { public partial class Form1 : Form { private MySqlConnection KBManagerConnection; private MySqlConnection slaveConnection; private MySqlConnection compareConnection; public Form1() { InitializeComponent(); // DataGridViewCellFormatting À̺¥Æ® Çڵ鷯 Ãß°¡ dataGridView1.CellFormatting += DataGridView_CellFormatting; // ¶óµð¿À ¹öư CheckedChanged À̺¥Æ® Çڵ鷯 ¿¬°á radioAll.CheckedChanged += radioButton_CheckedChanged; radioTen.CheckedChanged += radioButton_CheckedChanged; radioHundred.CheckedChanged += radioButton_CheckedChanged; radioTenAndHundred.CheckedChanged += radioButton_CheckedChanged; } //========================================================================================== //======================================= ¹öư À̺¥Æ® ======================================= private void btnSearch_Click(object sender, EventArgs e) { string KBManagerServer = "dt11.kabead.com"; string ADBServer = "dt88.kabead.com"; string[] servers = { "dt11.kabead.com", "dt22.kabead.com", "dt44.kabead.com", "dt55.kabead.com", "dt66.kabead.com", "dt77.kabead.com", "dt88.kabead.com" }; string KBManagerConnectionString = $"Server={KBManagerServer};Database=kbmanager;User Id=root;Password=js4188..$!;SslMode=none;"; string slaveConnectionString = $"Server={ADBServer};Database=ordcsth_adb;User Id=root;Password=js4188..$!;SslMode=none;"; int totalTables = 0; int totalRecords = 0; int checkedTables = 0; int checkedRecords = 0; int tenOverCount = 0; int hundredOverCount = 0; tenOver.Text = "0"; hundredOver.Text = "0"; dataGridView1.Rows.Clear(); // µ¥ÀÌÅÍ Á¶È¸ Àü DataGridView¸¦ ÃʱâÈ­ try { using (KBManagerConnection = new MySqlConnection(KBManagerConnectionString)) using (slaveConnection = new MySqlConnection(slaveConnectionString)) { KBManagerConnection.Open(); slaveConnection.Open(); if (cmbServerList.Text == "ÀüüÁ¶È¸") { foreach (var compareServer in servers) { string realdbip = GetRealDbIp(compareServer); if (string.IsNullOrEmpty(realdbip)) continue; // ÇöÀç Á¶È¸ ÁßÀÎ DB IP¸¦ ¶óº§¿¡ ¼³Á¤ DataBaseName.Text = compareServer; string compareConnectionString = $"Server={compareServer};User Id=root;Password=js4188..$!;SslMode=none;"; using (compareConnection = new MySqlConnection(compareConnectionString)) { compareConnection.Open(); // µ¥ÀÌÅÍ Á¶È¸ ¹× ´©Àû ó¸® PerformDataRetrieval(compareConnection, realdbip, ADBServer, ref totalTables, ref totalRecords, ref checkedTables, ref checkedRecords, ref tenOverCount, ref hundredOverCount); } } } else { // °³º° ¼­¹ö Á¶È¸ string compareServer = cmbServerList.Text; string realdbip = GetRealDbIp(compareServer); if (string.IsNullOrEmpty(realdbip)) return; // ÇöÀç Á¶È¸ ÁßÀÎ DB IP¸¦ ¶óº§¿¡ ¼³Á¤ DataBaseName.Text = compareServer; string compareConnectionString = $"Server={compareServer};User Id=root;Password=js4188..$!;SslMode=none;"; using (compareConnection = new MySqlConnection(compareConnectionString)) { compareConnection.Open(); // µ¥ÀÌÅÍ Á¶È¸ ¹× ´©Àû ó¸® PerformDataRetrieval(compareConnection, realdbip, ADBServer, ref totalTables, ref totalRecords, ref checkedTables, ref checkedRecords, ref tenOverCount, ref hundredOverCount); } } // ÃÖÁ¾ÀûÀ¸·Î ´©ÀûµÈ Å×ÀÌºí ¼ö¿Í ·¹ÄÚµå ¼ö¸¦ UI¿¡ ¾÷µ¥ÀÌÆ® TableCount.Text = $"{checkedTables}/{totalTables}"; RecordCount.Text = $"{checkedRecords}/{totalRecords}"; tenOver.Text = tenOverCount.ToString(); hundredOver.Text = hundredOverCount.ToString(); } } catch (Exception ex) { MessageBox.Show($"Error: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void PerformDataRetrieval(MySqlConnection compareConnection, string realdbip, string ADBServer, ref int totalTables, ref int totalRecords, ref int checkedTables, ref int checkedRecords, ref int tenOverCount, ref int hundredOverCount) { // °¢ ¼­¹öÀÇ Å×ÀÌºí ¼ö °è»ê string countQuery = $@" SELECT COUNT(*) FROM `kbmanager`.`access` AS a WHERE a.`pggubun` IN ('00', '09', '11') AND a.`hidden` = 0 AND a.`dbname` LIKE 'carcs_%' AND a.`dbname` NOT IN ( 'carcs_kabeadcarcs', 'carcs_english', 'carcs_kabead', 'carcs_kabeadcarcs01', 'carcs_kabeadcarcs02', 'carcs_kabeadcarcs03', 'carcs_kabeadcarcs04', 'carcs_kabeadcarcs05', 'carcs_kabeadcarcs06', 'carcs_kabeadcarcs10', 'carcs_kabeadcarcs11', 'carcs_kabead1111', 'carcs_kabeadvn_car', 'carcs_thecarpet2002', 'carcs_woobo', 'carcs_test11', 'carcs_test1234', 'carcs_mnsict', 'carcs_hukio7', 'carcs_gongim7874', 'carcs_ksc0793', 'carcs_kjcjeong', 'carcs_adbtest' , 'carcs_jcar3233' , 'carcs_leemingi88' ) AND a.`dbip` = '{realdbip}'; "; MySqlCommand countCommand = new MySqlCommand(countQuery, KBManagerConnection); int serverTables = Convert.ToInt32(countCommand.ExecuteScalar()); totalTables += serverTables; //°¢ Å×À̺íÀÇ ·¹ÄÚµå ¼ö °è»ê string KBManagerQuery = countQuery.Replace("COUNT(*)", "a.`code`, a.`dbname`, a.`offname`, a.`dbip`"); MySqlCommand KBManagerCommand = new MySqlCommand(KBManagerQuery, KBManagerConnection); MySqlDataReader KBManagerReader = KBManagerCommand.ExecuteReader(); while (KBManagerReader.Read()) { string dbname = KBManagerReader["dbname"].ToString(); int serverRecords = GetTableRecordCount(compareConnection, dbname, "fixsale_d") + GetTableRecordCount(compareConnection, dbname, "fixsale_dw") + GetTableRecordCount(compareConnection, dbname, "fixsale_m"); totalRecords += serverRecords; } KBManagerReader.Close(); //°¢ Å×À̺íÀÇ µ¥ÀÌÅÍ Ã³¸® KBManagerReader = KBManagerCommand.ExecuteReader(); while (KBManagerReader.Read()) { string code = KBManagerReader["code"].ToString(); string dbip = KBManagerReader["dbip"].ToString(); string dbname = KBManagerReader["dbname"].ToString(); string offname = KBManagerReader["offname"].ToString(); if (IsDbVersionValid(compareConnection, dbname, 98)) { int fixsaleDCount = GetTableRecordCount(compareConnection, dbname, "fixsale_d") + GetTableRecordCount(compareConnection, dbname, "fixsale_dw"); int fixsaleMCount = GetTableRecordCount(compareConnection, dbname, "fixsale_m"); int adbFixsaleDCount = GetTableRecordCountByCode(slaveConnection, "adb_fixsale_d", code); int adbFixsaleMCount = GetTableRecordCountByCode(slaveConnection, "adb_fixsale_m", code); int fixsaleDDifference = fixsaleDCount - adbFixsaleDCount; int fixsaleMDifference = fixsaleMCount - adbFixsaleMCount; // 10 ÀÌ»ó 100 ¹Ì¸¸ Â÷ÀÌ Ä«¿îÆ® if (fixsaleDDifference >= 10 && fixsaleDDifference < 100) tenOverCount++; //if (fixsaleMDifference >= 10 && fixsaleMDifference < 100) tenOverCount++; // 100 ÀÌ»ó Â÷ÀÌ Ä«¿îÆ® if (fixsaleDDifference >= 100) hundredOverCount++; //if (fixsaleMDifference >= 100) hundredOverCount++; checkedTables++; checkedRecords += fixsaleDCount + fixsaleMCount; // µ¥ÀÌÅÍ ±×¸®µå ºä¿¡ Çà Ãß°¡ dataGridView1.Rows.Add(dbip, dbname, offname, code, ADBServer, fixsaleMDifference, fixsaleDDifference); // UI ¾÷µ¥ÀÌÆ® TableCount.Text = $"{checkedTables}/{totalTables}"; RecordCount.Text = $"{checkedRecords}/{totalRecords}"; Application.DoEvents(); } } KBManagerReader.Close(); } private string GetRealDbIp(string compareServer) { switch (compareServer) { case "dt11.kabead.com": return "dt01.kabead.com"; case "dt22.kabead.com": return "dt02.kabead.com"; case "dt44.kabead.com": return "dt04.kabead.com"; case "dt55.kabead.com": return "dt05.kabead.com"; case "dt66.kabead.com": return "dt06.kabead.com"; case "dt77.kabead.com": return "dt07.kabead.com"; case "dt88.kabead.com": return "dt08.kabead.com"; default: return null; } } private int GetTableRecordCount(MySqlConnection connection, string dbName, string tableName) { string query = $@"SELECT COUNT(1) FROM `{dbName}`.`{tableName}` "; MySqlCommand command = new MySqlCommand(query, connection); return Convert.ToInt32(command.ExecuteScalar()); } private int GetTableRecordCountByCode(MySqlConnection connection, string tableName, string code) { string query = $"SELECT COUNT(1) FROM `{tableName}` WHERE `accessCode` = @code"; MySqlCommand command = new MySqlCommand(query, connection); command.Parameters.AddWithValue("@code", code); return Convert.ToInt32(command.ExecuteScalar()); } private bool IsDbVersionValid(MySqlConnection connection, string dbName, int requiredVersion) { string query = $"SELECT COUNT(1) FROM `{dbName}`.`setting` WHERE setname = 'dbversion' AND setdata >= @version"; MySqlCommand command = new MySqlCommand(query, connection); command.Parameters.AddWithValue("@version", requiredVersion); return Convert.ToInt32(command.ExecuteScalar()) > 0; } private void btnExcel_Click(object sender, EventArgs e) { // ÇöÀç ¼±ÅÃµÈ ÅÇ¿¡ µû¶ó ÇØ´ç GridView¸¦ ¼±Åà DataGridView selectedGridView = dataGridView1; if (selectedGridView == null || selectedGridView.Rows.Count == 0) { MessageBox.Show("µ¥ÀÌÅͰ¡ ¾ø½À´Ï´Ù."); return; } using (SaveFileDialog saveFileDialog = new SaveFileDialog()) { saveFileDialog.Filter = "Excel Files|*.xlsx"; saveFileDialog.Title = "Save as Excel File"; saveFileDialog.FileName = DateTime.Now.ToString("yyyyMMddhhmm") + "ADBºñ±³.xlsx"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { // EPPlus ¶óÀ̺귯¸® ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (ExcelPackage excel = new ExcelPackage()) { ExcelWorksheet worksheet = excel.Workbook.Worksheets.Add("Sheet1"); for (int i = 0; i < selectedGridView.Columns.Count; i++) { worksheet.Cells[1, i + 1].Value = selectedGridView.Columns[i].HeaderText; worksheet.Cells[1, i + 1].Style.Font.Bold = true; } for (int i = 0; i < selectedGridView.Rows.Count; i++) { for (int j = 0; j < selectedGridView.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1].Value = selectedGridView.Rows[i].Cells[j].Value?.ToString(); } } worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); // ÀúÀå FileInfo excelFile = new FileInfo(saveFileDialog.FileName); excel.SaveAs(excelFile); MessageBox.Show("Excel ÆÄÀÏÀÌ ¼º°øÀûÀ¸·Î ÀúÀåµÇ¾ú½À´Ï´Ù."); } } } } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } //========================================================================================== //=========================================== À̺¥Æ® ======================================= private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { // ÀÌ À̺¥Æ®´Â ¸ðµç ¼¿¿¡ ´ëÇØ È£ÃâµÇ¹Ç·Î ƯÁ¤ Ä÷³À» ÇÊÅ͸µ DataGridView grid = sender as DataGridView; if (grid.Columns[e.ColumnIndex].Name == "RecordDifferenceDetail") // "·¹ÄÚµå Â÷ÀÌ" Ä÷³ À̸§ { if (e.Value != null && int.TryParse(e.Value.ToString(), out int difference)) { if (difference >= 100) { e.CellStyle.BackColor = System.Drawing.Color.Red; e.CellStyle.ForeColor = System.Drawing.Color.White; } else if (difference >= 10) { e.CellStyle.BackColor = System.Drawing.Color.Orange; e.CellStyle.ForeColor = System.Drawing.Color.Black; } } } } private void radioButton_CheckedChanged(object sender, EventArgs e) { // ¶óµð¿À ¹öư üũ ¿©ºÎ È®ÀÎ RadioButton rb = sender as RadioButton; if (rb.Checked) { ApplyFilter(rb.Name); } } private void ApplyFilter(string filterType) { foreach (DataGridViewRow row in dataGridView1.Rows) { int difference = 0; if (int.TryParse(row.Cells["RecordDifferenceDetail"].Value?.ToString(), out difference)) { switch (filterType) { case "radioTen": row.Visible = difference >= 10 && difference < 100; break; case "radioTenAndHundred": row.Visible = difference >= 10 ; break; case "radioHundred": row.Visible = difference >= 100; break; case "radioAll": default: row.Visible = true; break; } } } } } }