1

我从HERE找到了一个关于如何备份数据库的查询,但它不工作并且会引发错误。请提供任何帮助。TIA

代码:

using MySql.Data.MySqlClient;
public bool BackupDatabase(string filename = "")
{
    bool _isExecuted = false;

    if (filename == "")
    {
        filename = string.Format("{0}/db_{1:MMddyyyyHHmmss}.sql", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), DateTime.Now);
    }

    string _queryBackup = string.Format("mysqldump -u '{0}' -p '{1}' '{2}' > '{3}'", DatabaseUsername, DatabasePassword, DatabaseName, filename);         
    using (MySqlConnection con = new MySqlConnection(ConnectionString))
    {
        try
        {
            con.Open();
            MySqlCommand cmd = new MySqlCommand(_queryBackup, con);

            cmd.ExecuteNonQuery();
            _isExecuted = true;
        }
        catch (Exception ex)
        {
            string _x = ex.Message;
        }
    }

    return _isExecuted;
}

错误:

_x包含此错误

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在 'mysqldump -u 'root' -p 'usbw' 'my_database_name' > 'C:\Users\DesktopName 附近使用正确的语法\Desktop\db_08242012164022.sql' 在第 1 行"

4

1 回答 1

1

您的 _queryBackup 不是 sql 查询字符串,而是要从系统运行的字符串,就像您从 cmd 控制台运行它一样。

这是一些从 C# 运行命令的代码,例如您的命令

  var startInfo = new ProcessStartInfo(command, parameterstring);
  startInfo.RedirectStandardError = true;
  startInfo.CreateNoWindow = true;
  startInfo.RedirectStandardOutput = true;
  startInfo.UseShellExecute = false;
  startInfo.ErrorDialog = false;
  Process process = Process.Start(startInfo);
  StreamReader stdoutSR = process.StandardOutput;
  string stdout = stdoutSR.ReadToEnd();
  StreamReader stderrSR = process.StandardError;
  string stderr = stderrSR.ReadToEnd();
于 2012-08-24T08:44:18.960 回答