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. -R 在第二个块中的作用是什么?

4

3 回答 3

2
  1. 您不能在参数中使用“>”重定向标准输出,因为这是命令提示符的一个功能。

  2. -R 包括转储中的存储过程和函数。有关更多信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_routines

于 2012-03-03T17:09:33.917 回答
1

您在命令行版本中所做的是使用 shell 将标准输出通过管道传输到文件(>命令后跟文件名,是一种简写方式,即“获取该程序的所有标准输出并编写它到这个文件”)。要从 C# 中执行相同的操作,您需要自己处理标准输出并将其写入文件。

第二-R个例子中的似乎是重复的。根据这个页面,它是一样的--routines。你试过没有吗?

于 2012-03-03T17:08:29.130 回答
0

我想我会以编程方式包含参数的外观,在我们的例子中,我们还想将数据库的事件转储到文件中。

psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", "someUser", "xxxxxx", "localhost", dbName, "--routines","--events");
于 2013-07-22T14:21:49.457 回答