我正在开发一个C#应用程序,我必须在其中复制MySQL中已存在的数据库模式。我正在使用mysqldump.exe
来完成任务。在一个进程中,我执行mysqldump.exe
并将所需的参数传递给进程。以下是我的流程代码。
ProcessStartInfo proc = new ProcessStartInfo();
proc.Arguments = @"-h localhost --port 33060 -u root -p1234 MasterDB | mysql -h localhost --port 33060 -u root -p1234 ChildDB";
proc.FileName = @"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe";
proc.UseShellExecute = false;
proc.RedirectStandardOutput = true;
Process p = Process.Start(proc);
using (StreamReader reader = p.StandardOutput)
{
string result = reader.ReadToEnd();
Console.Write(result);
}
p.WaitForExit(60000);
当我从DOS使用相同的参数执行mysqldump.exe时,它运行正常,并将masterDB架构的副本复制到childDB中。但是从这个C#代码中它不起作用。
我传递给流程的参数字符串存在一些问题。在控制台应用程序中,它向我显示错误“找不到表”。我试图以不同的方式编写字符串,但对我没用。
答案 0 :(得分:0)
在互联网上没有找到任何答案后,我自己一直在努力找到解决问题的方法。下面是我的数据库模式A复制到数据库b的代码。
ProcessStartInfo proc = new ProcessStartInfo("cmd.exe");
proc.WorkingDirectory = "C:";
proc.RedirectStandardInput = true;
proc.RedirectStandardOutput = true;
proc.WindowStyle = ProcessWindowStyle.Hidden;
proc.UseShellExecute = false;
proc.CreateNoWindow = true;
Process p = Process.Start(proc);
p.StandardInput.WriteLine(@"cd ""C:\Program Files\MySQL\MySQL Server 5.6\bin""");
p.StandardInput.WriteLine(@"mysqldump -h localhost --port 33060 -u root -p1234 vrecord_client | mysql -h localhost --port 33060 -u root -p1234 "+ DBName +"");
p.WaitForExit();