Winform中实现连接Mysql8使用mysqldump实现备份表的数据
場景
Winform中連接Mysql8并查詢表中數據進行顯示:
Winform中連接Mysql8并查詢表中數據進行顯示_BADAO_LIUMANG_QIZHI的博客-CSDN博客
在上面實現連接Mysql8的基礎上,怎樣借助于mysqldump實現數據備份。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi?
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
1、繼續上面的winform的布局,設計布局如下
2、獲取需要的參數
通過TextBox來獲取備份單表的按鈕的表名輸入,通過Button"選擇備份文件路徑"以及后面的TextBox來選擇要進行備份的路徑。
其中選擇備份文件的路徑的點擊事件為
??????? private void button_select_path_Click(object sender, EventArgs e){FolderBrowserDialog path = new FolderBrowserDialog();path.ShowDialog();this.textBox_bak_path.Text = path.SelectedPath;}然后通過一個TextBox來獲取本機(即需要運行Winform的機器)的mysqldump.exe的路徑,記得要帶雙引號。
3、實現單表的備份
然后再備份單表的按鈕的點擊事件中
??????? private void button4_Click(object sender, EventArgs e){PassForm passForm = new PassForm();passForm.ShowDialog();//密碼驗證通過if (passForm.DialogResult == DialogResult.OK){string mysqlDumpPath = this.text_mysqldump_path.Text.Trim();string tableName = this.text_one_table.Text.Trim();if (String.IsNullOrEmpty(tableName)){MessageBox.Show("表名不能為空!!!");}else if (String.IsNullOrEmpty(mysqlDumpPath)){MessageBox.Show("mysqldump的路徑不能為空!!!");}else{string cmdStr = mysqlDumpPath + " -h " + this.host.Text.Trim() + " -u" + this.username.Text.Trim() + " -p" + this.password.Text.Trim() + " " + this.database.Text.Trim() + " " + this.text_one_table.Text.Trim() + " > " + "\"" + this.textBox_bak_path.Text.Trim() + "\\" + "bus_area.sql\"";CmdHelper.ExeCommand(cmdStr);}}else{MessageBox.Show("密碼不正確");}}這里首先加了一個密碼驗證的邏輯,防止誤操作亂點按鈕,通過后,獲取到表名和mysqldump的路徑然后進行拼接成cmdStr,
在拼接之后需要打斷點到這步獲取完整的cmd命令,然后再cmd中先手動執行一下試試。
這里在執行cmd時調用了一個幫助類CmdHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace mysqldatabak {using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;namespace Helper{/// <summary>/// 執行命令/// </summary>public class CmdHelper{////// 執行cmd.exe命令//////命令文本/// 命令輸出文本public static string ExeCommand(string commandText){return ExeCommand(new string[] { commandText });}////// 執行多條cmd.exe命令//////命令文本數組/// 命令輸出文本public static string ExeCommand(string[] commandTexts){Process p = new Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.CreateNoWindow = true;string strOutput = null;try{p.Start();foreach (string item in commandTexts){p.StandardInput.WriteLine(item);}p.StandardInput.WriteLine("exit");strOutput = p.StandardOutput.ReadToEnd();//strOutput = Encoding.UTF8.GetString(Encoding.Default.GetBytes(strOutput));p.WaitForExit();p.Close();}catch (Exception e){strOutput = e.Message;}return strOutput;}////// 啟動外部Windows應用程序,隱藏程序界面//////應用程序路徑名稱/// true表示成功,false表示失敗public static bool StartApp(string appName){return StartApp(appName, ProcessWindowStyle.Hidden);}////// 啟動外部應用程序//////應用程序路徑名稱///進程窗口模式/// true表示成功,false表示失敗public static bool StartApp(string appName, ProcessWindowStyle style){return StartApp(appName, null, style);}////// 啟動外部應用程序,隱藏程序界面//////應用程序路徑名稱///啟動參數/// true表示成功,false表示失敗public static bool StartApp(string appName, string arguments){return StartApp(appName, arguments, ProcessWindowStyle.Hidden);}////// 啟動外部應用程序//////應用程序路徑名稱///啟動參數///進程窗口模式/// true表示成功,false表示失敗public static bool StartApp(string appName, string arguments, ProcessWindowStyle style){bool blnRst = false;Process p = new Process();p.StartInfo.FileName = appName;//exe,bat and so onp.StartInfo.WindowStyle = style;p.StartInfo.Arguments = arguments;try{p.Start();p.WaitForExit();p.Close();blnRst = true;}catch{}return blnRst;}}} }3、測試單表效果
在建立連接成功并配置各項參數后,點擊備份單表
驗證通過后到指定路徑下查看結果
4、備份所有表實現
在備份所有表的點擊事件中
??????? private void button_bak_all_Click(object sender, EventArgs e){PassForm passForm = new PassForm();passForm.ShowDialog();if (passForm.DialogResult == DialogResult.OK){DataTable tbName = mySqlConnection.GetSchema("Tables");if (tbName.Columns.Contains("TABLE_NAME")){foreach (DataRow dr in tbName.Rows){string mysqlDumpPath = this.text_mysqldump_path.Text.Trim();string tableName = (string)dr["TABLE_NAME"];string cmdStr = mysqlDumpPath + " -h " + this.host.Text.Trim() + " -u" + this.username.Text.Trim() + " -p" + this.password.Text.Trim() + " " + this.database.Text.Trim() + " " + tableName + " > " + "\"" + this.textBox_bak_path.Text.Trim() + "\\" + tableName + ".sql\"";CmdHelper.ExeCommand(cmdStr);this.log_text.AppendText((string)dr["TABLE_NAME"] + "--備份完成");this.log_text.AppendText("\r\n");}}}else{MessageBox.Show("密碼不正確");}}邏輯是獲取所有的表名然后循環拼接表名進行導出sql
效果
?
總結
以上是生活随笔為你收集整理的Winform中实现连接Mysql8使用mysqldump实现备份表的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform中怎样重写窗体关闭事件实现
- 下一篇: Winform中实现执行cmd命令的工具