0

コマンドラインからデータベースをダンプするには、次のことを行う必要があります。

mysqldump -uroot --password=  myDb --routines> "C:\s.sql"

したがって、プログラムで試すのはこれだけです。これは、私が推測する直接的な解釈です。

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = dumpUtilityPath;
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;

psi.Arguments = "-uroot --password=  myDb --routines> \"C:\\s.sql\"";

Process process = Process.Start(psi);
process.WaitForExit();
process.Close();

これはまったく機能しません。代わりに、ネット全体で見つけることができるこれを選択する必要があります。これも機能します。

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = dumpUtilityPath;
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;

psi.Arguments = string.Format("-R -u{0} --password={1} -h{2} {3} --routines", "root", "", "localhost", "myDb");

Process process = Process.Start(psi);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
process.Close();

using (StreamWriter writer = new StreamWriter("C:\\s.sql"))
{
    writer.WriteLine(output);
    writer.Close();
}
  1. コマンドプロンプトのコマンドから直接実行できるSQLファイルでデータベースを取得するためにストリームライターを使用する必要があるのはなぜですか?

  2. 2番目のブロックでの-Rの役割は何ですか?

4

3 に答える 3

2
  1. 引数に「>」を使用してstdoutをリダイレクトすることはできません。これは、コマンドプロンプトの機能であるためです。

  2. -Rには、ストアドプロシージャと関数がダンプに含まれます。詳細については、 http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_routinesを参照してください。

于 2012-03-03T17:09:33.917 に答える
1

コマンド ライン バージョンで行っているのは、シェルを使用して標準出力をファイルにパイプすることです (>コマンドの後にファイル名が続くのは、「このプログラムのすべての標準出力を取得して、それを書き込む」という簡単な方法です)。このファイルに」)。C# から同じことを行うには、標準出力を自分で渡してファイルに書き込む必要があります。

2番目の-R例は重複しているようです。このページによると、 と同じ--routinesです。せずに試しましたか?

于 2012-03-03T17:08:29.130 に答える