2016-06-08 4 views
0

Я работаю над приложением C#, в котором мне нужно сделать копию уже существующей схемы базы данных в MySQL. Я использую mysqldump.exe для выполнения задачи. В рамках процесса я выполняю mysqldump.exe и передаю необходимые аргументы процессу. Ниже мой код процесса.MySQL дублирующая схема с использованием mysqldump.exe в процессе C#

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); 

Когда я исполняю mysqldump.exe из DOS с теми же аргументами, что работает хорошо, и сделать копию masterDB схемы в childDB. Но изнутри этого кода C# это не работает.

Существует некоторая проблема с строкой аргумента, которую я передаю процессу. В консольном приложении это показывает мне ошибку «не удалось найти таблицу». Я попытался составить строку по-разному, но для меня ничего не работало.

+0

umer см. Http://stackoverflow.com/q/850802 – Drew

ответ

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();