当前位置:   article > 正文

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

winfrom mysqldump

场景

Winform中连接Mysql8并查询表中数据进行显示:

Winform中连接Mysql8并查询表中数据进行显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客

在上面实现连接Mysql8的基础上,怎样借助于mysqldump实现数据备份。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi 
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、继续上面的winform的布局,设计布局如下

2、获取需要的参数

通过TextBox来获取备份单表的按钮的表名输入,通过Button"选择备份文件路径"以及后面的TextBox来选择要进行备份的路径。

其中选择备份文件的路径的点击事件为

  1.         private void button_select_path_Click(object sender, EventArgs e)
  2.         {
  3.             FolderBrowserDialog path = new FolderBrowserDialog();
  4.             path.ShowDialog();
  5.             this.textBox_bak_path.Text = path.SelectedPath;
  6.         }

然后通过一个TextBox来获取本机(即需要运行Winform的机器)的mysqldump.exe的路径,记得要带双引号。

3、实现单表的备份

然后再备份单表的按钮的点击事件中

  1.         private void button4_Click(object sender, EventArgs e)
  2.         {
  3.             PassForm passForm = new PassForm();
  4.             passForm.ShowDialog();
  5.             //密码验证通过
  6.             if (passForm.DialogResult == DialogResult.OK)
  7.             {
  8.                 string mysqlDumpPath = this.text_mysqldump_path.Text.Trim();
  9.                 string tableName = this.text_one_table.Text.Trim();
  10.                 if (String.IsNullOrEmpty(tableName))
  11.                 {
  12.                     MessageBox.Show("表名不能为空!!!");
  13.                 }
  14.                 else if (String.IsNullOrEmpty(mysqlDumpPath))
  15.                 {
  16.                     MessageBox.Show("mysqldump的路径不能为空!!!");
  17.                 }
  18.                 else
  19.                 {
  20.                     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\"";
  21.                     CmdHelper.ExeCommand(cmdStr);
  22.                 }
  23.             }
  24.             else
  25.             {
  26.                 MessageBox.Show("密码不正确");
  27.             }
  28.         }

这里首先加了一个密码验证的逻辑,防止误操作乱点按钮,通过后,获取到表名和mysqldump的路径然后进行拼接成cmdStr,

在拼接之后需要打断点到这步获取完整的cmd命令,然后再cmd中先手动执行一下试试。

这里在执行cmd时调用了一个帮助类CmdHelper

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace mysqldatabak
  7. {
  8.     using System;
  9.     using System.Collections.Generic;
  10.     using System.Text;
  11.     using System.Diagnostics;
  12.     namespace Helper
  13.     {
  14.         /// <summary>
  15.         /// 执行命令
  16.         /// </summary>
  17.         public class CmdHelper
  18.         {
  19.             ///
  20.             /// 执行cmd.exe命令
  21.             ///
  22.             ///命令文本
  23.             /// 命令输出文本
  24.             public static string ExeCommand(string commandText)
  25.             {
  26.                 return ExeCommand(new string[] { commandText });
  27.             }
  28.             ///
  29.             /// 执行多条cmd.exe命令
  30.             ///
  31.             ///命令文本数组
  32.             /// 命令输出文本
  33.             public static string ExeCommand(string[] commandTexts)
  34.             {
  35.                 Process p = new Process();
  36.                 p.StartInfo.FileName = "cmd.exe";
  37.                 p.StartInfo.UseShellExecute = false;
  38.                 p.StartInfo.RedirectStandardInput = true;
  39.                 p.StartInfo.RedirectStandardOutput = true;
  40.                 p.StartInfo.RedirectStandardError = true;
  41.                 p.StartInfo.CreateNoWindow = true;
  42.                 string strOutput = null;
  43.                 try
  44.                 {
  45.                     p.Start();
  46.                     foreach (string item in commandTexts)
  47.                     {
  48.                         p.StandardInput.WriteLine(item);
  49.                     }
  50.                     p.StandardInput.WriteLine("exit");
  51.                     strOutput = p.StandardOutput.ReadToEnd();
  52.                     //strOutput = Encoding.UTF8.GetString(Encoding.Default.GetBytes(strOutput));
  53.                     p.WaitForExit();
  54.                     p.Close();
  55.                 }
  56.                 catch (Exception e)
  57.                 {
  58.                     strOutput = e.Message;
  59.                 }
  60.                 return strOutput;
  61.             }
  62.             ///
  63.             /// 启动外部Windows应用程序,隐藏程序界面
  64.             ///
  65.             ///应用程序路径名称
  66.             /// true表示成功,false表示失败
  67.             public static bool StartApp(string appName)
  68.             {
  69.                 return StartApp(appName, ProcessWindowStyle.Hidden);
  70.             }
  71.             ///
  72.             /// 启动外部应用程序
  73.             ///
  74.             ///应用程序路径名称
  75.             ///进程窗口模式
  76.             /// true表示成功,false表示失败
  77.             public static bool StartApp(string appName, ProcessWindowStyle style)
  78.             {
  79.                 return StartApp(appName, null, style);
  80.             }
  81.             ///
  82.             /// 启动外部应用程序,隐藏程序界面
  83.             ///
  84.             ///应用程序路径名称
  85.             ///启动参数
  86.             /// true表示成功,false表示失败
  87.             public static bool StartApp(string appName, string arguments)
  88.             {
  89.                 return StartApp(appName, arguments, ProcessWindowStyle.Hidden);
  90.             }
  91.             ///
  92.             /// 启动外部应用程序
  93.             ///
  94.             ///应用程序路径名称
  95.             ///启动参数
  96.             ///进程窗口模式
  97.             /// true表示成功,false表示失败
  98.             public static bool StartApp(string appName, string arguments, ProcessWindowStyle style)
  99.             {
  100.                 bool blnRst = false;
  101.                 Process p = new Process();
  102.                 p.StartInfo.FileName = appName;//exe,bat and so on
  103.                 p.StartInfo.WindowStyle = style;
  104.                 p.StartInfo.Arguments = arguments;
  105.                 try
  106.                 {
  107.                     p.Start();
  108.                     p.WaitForExit();
  109.                     p.Close();
  110.                     blnRst = true;
  111.                 }
  112.                 catch
  113.                 {
  114.                 }
  115.                 return blnRst;
  116.             }
  117.         }
  118.     }
  119. }

3、测试单表效果

在建立连接成功并配置各项参数后,点击备份单表

验证通过后到指定路径下查看结果

4、备份所有表实现

在备份所有表的点击事件中

  1.         private void button_bak_all_Click(object sender, EventArgs e)
  2.         {
  3.             PassForm passForm = new PassForm();
  4.             passForm.ShowDialog();
  5.             if (passForm.DialogResult == DialogResult.OK)
  6.             {
  7.                 DataTable tbName = mySqlConnection.GetSchema("Tables");
  8.                 if (tbName.Columns.Contains("TABLE_NAME"))
  9.                 {
  10.                     foreach (DataRow dr in tbName.Rows)
  11.                     {
  12.                         string mysqlDumpPath = this.text_mysqldump_path.Text.Trim();
  13.                         string tableName = (string)dr["TABLE_NAME"];
  14.                         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\"";
  15.                         CmdHelper.ExeCommand(cmdStr);
  16.                         this.log_text.AppendText((string)dr["TABLE_NAME"] + "--备份完成");
  17.                         this.log_text.AppendText("\r\n");
  18.                     }
  19.                 }
  20.             }
  21.             else
  22.             {
  23.                 MessageBox.Show("密码不正确");
  24.             }
  25.         }

逻辑是获取所有的表名然后循环拼接表名进行导出sql

效果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/711583
推荐阅读
相关标签
  

闽ICP备14008679号