热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

场景Winform中连接Mysql8并查询表中数据进行显示:https:blog.csdn.netBADAO_LIUMANG_QIZHIarticledetails12039598

场景

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
{
///


/// 执行命令
///

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("\r\n");
}
}
}
else
{
MessageBox.Show("密码不正确");
}
}

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

效果

 

 



推荐阅读
  • 本文介绍了基于Java的汽车租赁系统开发,涵盖了从车辆采购预算到车辆维护的全过程管理。该系统利用现代互联网技术和数据库技术,实现了汽车租赁行业的全面信息化。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本文介绍如何在Windows Forms应用程序中使用C#实现DataGridView的多列排序功能,包括升序和降序排序。 ... [详细]
  • Eclipse 下 JavaFX 程序开发指南
    本文介绍了 JavaFX,这是一个用于创建富客户端应用程序的 Java 图形和媒体工具包,并详细说明了如何在 Eclipse 环境中配置和开发 JavaFX 应用。 ... [详细]
  • 利用HTML5 Canvas高效构建电信网络拓扑图
    电信网络拓扑图在实际应用中具有很高的实用价值。本文介绍了一个基于HTML5 Canvas的电信网络拓扑图项目,不仅实现了基本的图形展示功能,还加入了自动布局和属性栏功能,使项目更加完善。此Demo经过细微调整即可直接应用于实际项目中。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 本文将指导如何向ReactJS计算器应用添加必要的功能,使其能够响应用户操作并正确计算数学表达式。 ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
  • 本文详细探讨了如何在 C# 中使用 Infragistics 组件库解决常见的开发问题,包括工具栏按钮禁用、Grid 中的时间记录及样式设置、以及 Excel 导出功能的实现。 ... [详细]
  • C#里时关闭子窗口时base.Dispose(disposing)报错:ValueDispose()cannotbecalledwhiledoingCreateHandle(). ... [详细]
author-avatar
陈宏儒64721
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有