Чтобы вывести базу данных из командной строки, все, что мне нужно сделать, это:
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();
}
Почему мне нужно использовать потоковую запись, чтобы получить базу данных вФайл SQL, который я могу сделать в противном случае непосредственно из команд в командной строке?
Какова роль -R во втором блоке?