1

データベースのバックアップ方法に関するHEREのクエリを見つけましたが、機能せず、エラーがスローされます。助けてください。ティア

コード:

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 構文にエラーがあります。'mysqldump -u 'root' -p 'usbw' 'my_database_name' > 'C:\Users\DesktopName の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 \Desktop\db_08242012164022.sql' 行 1"

4

1 に答える 1

1

_queryBackupはSQLクエリ文字列ではなく、cmdコンソールから実行するかのようにシステムから実行する文字列です。

C#からyoursなどのコマンドを実行するためのコードを次に示します。

  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 に答える