日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Winform中实现连接Mysql8使用mysqldump实现备份表的数据

發(fā)布時間:2025/3/19 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Winform中实现连接Mysql8使用mysqldump实现备份表的数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

場景

Winform中連接Mysql8并查詢表中數(shù)據(jù)進行顯示:

Winform中連接Mysql8并查詢表中數(shù)據(jù)進行顯示_BADAO_LIUMANG_QIZHI的博客-CSDN博客

在上面實現(xiàn)連接Mysql8的基礎上,怎樣借助于mysqldump實現(xiàn)數(shù)據(jù)備份。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi?
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費下載。

實現(xiàn)

1、繼續(xù)上面的winform的布局,設計布局如下

2、獲取需要的參數(shù)

通過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、實現(xiàn)單表的備份

然后再備份單表的按鈕的點擊事件中

??????? 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中先手動執(zhí)行一下試試。

這里在執(zhí)行cmd時調(diào)用了一個幫助類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>/// 執(zhí)行命令/// </summary>public class CmdHelper{////// 執(zhí)行cmd.exe命令//////命令文本/// 命令輸出文本public static string ExeCommand(string commandText){return ExeCommand(new string[] { commandText });}////// 執(zhí)行多條cmd.exe命令//////命令文本數(shù)組/// 命令輸出文本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);}////// 啟動外部應用程序,隱藏程序界面//////應用程序路徑名稱///啟動參數(shù)/// true表示成功,false表示失敗public static bool StartApp(string appName, string arguments){return StartApp(appName, arguments, ProcessWindowStyle.Hidden);}////// 啟動外部應用程序//////應用程序路徑名稱///啟動參數(shù)///進程窗口模式/// 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、測試單表效果

在建立連接成功并配置各項參數(shù)后,點擊備份單表

驗證通過后到指定路徑下查看結(jié)果

4、備份所有表實現(xiàn)

在備份所有表的點擊事件中

??????? 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("密碼不正確");}}

邏輯是獲取所有的表名然后循環(huán)拼接表名進行導出sql

效果

?

總結(jié)

以上是生活随笔為你收集整理的Winform中实现连接Mysql8使用mysqldump实现备份表的数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。