我正在使用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#代码中,它不起作用。

我传递给进程的参数字符串存在一些问题。在控制台应用程序中,它向我显示错误“找不到表”。我试图用不同的方式来编成字符串,但对我没有用。

最佳答案

在互联网上任何地方都找不到任何答案之后,我自己动手工作,并找到解决问题的方法。下面是将我的数据库模式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();

关于c# - 在C#进程中使用mysqldump.exe的MySQL复制模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37695057/

10-13 07:45
查看更多