[英]Backing up Database in MySQL using C#
我创建了一个 Winforms 来备份我的数据库。 然后当我运行我的程序时,它给出了一个未处理的 Win32Exception。 “系统找不到指定的文件”尽管该文件已存在并导致该异常。
这是我关于我的问题的代码
using System.Diagnostics;
private void btnProceed_Click(object sender, EventArgs e)
{
path = @"D:\MySQL\MySQL Server 5.5\bin\mysqldump.exe -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > D:\C#\Client\Salesmate - EMC\SalesMate\Backup\" + maskeTxtBoxDBFile.Text + @"";
Process p = new Process();
p.StartInfo.FileName = path;
p.Start();
}
您可以使用MySqlBackup.NET作为替代的mysqldump
文档:
http://www.codeproject.com/Articles/256466/MySqlBackup-NET-MySQL-Backup-Solution-for-Csharp-V
https://github.com/MySqlBackupNET/MySqlBackup.Net
示例代码:
备份 MySQL 数据库
using MySql.Data.MySqlClient;
然后是代码
private void Backup()
{
string constring = "server=localhost;user=root;pwd=qwerty;database=test;";
string file = "C:\\backup.sql";
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
mb.ExportToFile(file);
conn.Close();
}
}
}
}
还原 MySQL 数据库
private void Restore()
{
string constring = "server=localhost;user=root;pwd=qwerty;database=test;";
string file = "C:\\backup.sql";
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
mb.ImportFromFile(file);
conn.Close();
}
}
}
}
更新:
我是这个库的作者之一。
我已经尝试过该代码,但在运行前出现问题。 例外是 - System.Windows.Forms.dll 中发生类型为“System.IO.FileLoadException”的未处理异常
附加信息:无法加载文件或程序集“MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或其依赖项之一。 定位的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)
我相信您必须提到用户,密码,数据库名称和目标路径..
string path = @"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > " + txtBoxDBName.Text + @".sql";
备份:#mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
恢复:# mysql -u root -p[root_password] [database_name] < dumpfilename.sql
http://www.thegeekstuff.com/2008/09/backup-and-restore-mysql-database-using-mysqldump/
你可以试试这个。
public void BackUpData(string file)
{
using (MySqlConnection con = new MySqlConnection { ConnectionString = config })
{
using (MySqlCommand cmd = new MySqlCommand { Connection = con })
{
using (MySqlBackup mb = new MySqlBackup { Command = cmd })
{
try
{
con.Open();
try
{
mb.ExportToFile(file);
}
catch(MySqlException ex)
{
msgErr(ex.Message + " sql query error.");
return;
}
}
catch(MySqlException ex)
{
msgErr(ex.Message + " connection error.");
return;
}
}
}
}
}
+ @""
完全没用,它不插入任何引号。 更正引号的正确代码版本是: path = @"""D:\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe"" -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > ""D:\\C#\\Client\\Salesmate - EMC\\SalesMate\\Backup\\" + maskeTxtBoxDBFile.Text + @"""";
为了提高可读性: path = $@"""D:\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe"" -u {txtBoxDBUsername.Text} -p {txtBoxDBName.Text} > ""D:\\C#\\Client\\Salesmate - EMC\\SalesMate\\Backup{maskeTxtBoxDBFile.Text}""";
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\xampp\mysql\bin\mysql.exe";
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = false;
psi.CreateNoWindow = true;
psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", "root", "password", "localhost", "your_dbname");
psi.UseShellExecute = false;
Process process = Process.Start(psi);
process.StandardInput.Write(File.ReadAllText(inputFilePath));
process.StandardInput.Close();
process.WaitForExit();
process.Close();
这个对我有用,只要您备份了 .sql 文件就可以尝试一下
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.