10

我创建了一个 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();
}
4

6 回答 6

36

您可以使用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();
            }
        }
    }
}

更新:
我是这个库的作者之一。

于 2012-09-07T04:21:25.763 回答
1

我已经尝试过该代码,但在运行之前发生了问题。例外是 - System.Windows.Forms.dll 中发生了“System.IO.FileLoadException”类型的未处理异常

附加信息:无法加载文件或程序集“MySql.Data,Version=6.5.4.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

于 2015-02-17T05:29:09.817 回答
0

我相信您必须提及用户,密码,数据库名称和目标路径..

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/

于 2012-09-07T04:23:38.217 回答
0
  • 不要将整个调用放在“path =”中,您应该使用“Arguments”来指定参数,如名称所示。如果库检查是否存在被调用文件(您的整个路径),它不应该找到它!
  • 你确定那条路径是正确的吗?您应该使用注册表找到 MySQL 服务器路径,而不是对路径进行硬编码,或者如果这对您来说不容易,您可以将其作为参数从命令行传递或从您的表单(设置页面)中指定。
  • 您可能错过了凭据:-u 应该用于用户名(即使我使用 --user),-p 应该用于密码(即使我使用 --password)。为什么将“txtBoxDB Name .Text”作为密码传递?!
  • 也许您的目标路径无效:它包含空格,如果您使用空格,则应使用引号。
  • txtBoxDBName.Text (?password?) 包含什么?也有空格?如果是,它不起作用。
  • last present of + @""完全没用,它不插入任何引号。

修正了引号的代码的正确版本是: 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}""";

于 2018-06-07T08:28:48.127 回答
0
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 文件,您就可以尝试一下

于 2018-06-08T08:02:42.123 回答
0

你可以试试这个。

    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;
                    }



                }

            }

        }

    }
于 2017-06-23T06:25:20.170 回答