string strError = string.Empty;//执行cmd获取输出信息。
Process p= newProcess();
p.StartInfo.FileName= "cmd.exe";
p.StartInfo.RedirectStandardInput= true;
p.StartInfo.UseShellExecute= false;
p.StartInfo.RedirectStandardOutput= true;//获取输出流//p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;//获取错误信息流
p.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow= true;//除数据外,表结构、视图、存储过程、函数、事件全部导出
p.Start();
p.StandardInput.WriteLine("c:");
p.StandardInput.WriteLine("cd C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin");
p.StandardInput.WriteLine("mysqldump -h 192.168.0.1 -P3306 -uroot -p123456-q -d -R -E --skip-add-drop-table --default-character-set=utf8
--extended-insert=falseMysqlDBName> c:\MysqlDBNameNoData.sql");//-q 快速读取,-d不导数据,-R存储存储过程和函数,--extended-insert=false 逐行执行(视图嵌视图时需要用到),-E 导出事件,--add-drop-tables 删除表,--skip-add-drop-table不删除表
p.StandardInput.WriteLine("exit");
p.BeginOutputReadLine();
strError=p.StandardError.ReadToEnd();
p.WaitForExit();if (!string.IsNullOrWhiteSpace(strError))//执行失败则跳出
{return;
}//去除DEFINER(如果数据库在不同的服务器,很可能会有权限问题,将权限这部分代码替换掉)
StreamReader sr = newStreamReader(storeDBnoDataPath); Regex rg3 = new Regex("DEFINER=`.{1,50}`@`%`");//如果用户名比较长,这里可以设置的更长一些,但不要过度长,否则会替换掉需要的数据string sql =sr.ReadToEnd();
sr.Close(); string strOutput = rg3.Replace(sql, "");
StreamWriter sw= new StreamWriter(storeDBnoDataPath, false, System.Text.Encoding.UTF8);
sw.Write(strOutput);
sw.Close();//除数据外,表结构、视图、存储过程、函数、事件全部导入
p.Start();
p.StandardInput.WriteLine("c:");
p.StandardInput.WriteLine("cd C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin");p.StandardInput.WriteLine("mysql -h 192.168.0.2 -P3306 -uroot -p123456 MysqlDBName
p.StandardInput.WriteLine("exit");
strError=p.StandardError.ReadToEnd();
p.WaitForExit();if (!string.IsNullOrWhiteSpace(strError))//执行失败则跳出
{return;
}