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


    场景

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

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/120395988

    在上面实现连接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 on
                    p.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("
    ");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("密码不正确");
                }
    
            }

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

    效果

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/15361571.html
Copyright © 2020-2023  润新知