2013-05-10 81 views
0

我正在编写一个应用程序,它应该创建一个数据库的完整副本,然后使用不同的名称将其导入到同一个服务器上。
所以,我想我应该使用mysqldump和mysql以及我应该传递给它们的参数。
好的,但我无法将转储文件放在我想要的位置,因为我必须知道位置,然后将它传递给mysql。
C#和mysqldump

StringBuilder exportPath = new StringBuilder(); 
//exportPath.Append(Directory.GetCurrentDirectory()); 
exportPath.Append(@" > C:\Temp\backup.sql"); 

Process MySQLDump = new Process(); 
MySQLDump.StartInfo.UseShellExecute = true; 
//MySQLDump.StartInfo.RedirectStandardOutput = true; 
MySQLDump.StartInfo.FileName = "mysqldump"; 
MySQLDump.StartInfo.Arguments = "-u root -proot -h localhost mytable" + exportPath; 
MySQLDump.Start(); 
//string theDump = MySQLDump.StandardOutput.ReadToEnd(); 
MySQLDump.WaitForExit(); 
MySQLDump.Close(); 

我做错了什么,但我不知道是什么。

+0

mysqldump命令是否像命令行那样工作?运行你的c#的用户是否有权限运行mysqldump? – mconlin 2013-05-10 13:52:35

+0

试着把1放在1之前> like 1> C:\\ ......' – Steve 2013-05-10 13:58:12

+0

当我在CMD中运行完全相同的命令时,一切正常,但是当我运行我的项目时什么也没有发生。 – 2013-05-10 14:09:53

回答

1

你有两个选择:

  • 不重定向命令行的mysqldump的输出,而是使用更verbouse进程创建和挂钩的mysqldump的标准输出。这使得可以对文件进行后处理(将其作为示例散列),并将其写出到所需的位置,或者直接将其运行到导入实例的标准输入中。
  • 了解,> C:\\Documents and Settings\\admin\\Desktop\\databases\\db.sql不是命令行参数。你需要sssemble和参数和重定向部分字符串,并使用shell执行。请确保您使用绝对路径名称。
+0

我有点新手在C#编程,所以很抱歉,如果我问愚蠢的问题。 :D 如何做到这一点?我也想绕过保存到文件的过程,但我不知道如何将它发回到MySQL。而如果mysql的输出大到300-400兆字节呢? – 2013-05-10 14:10:47

+0

你会想看看ProcessStartInfo类 - 创建一个实例,填写它并确保你设置了'RedirectStandardOutput'。从它开始创建一个进程,启动后,使用'Process.StandardOutput'来读取输出。您可以读取内存直到达到阈值(例如100MB),如果超过此值,则使用临时文件。 – 2013-05-10 14:32:29

+0

谢谢!我参与了Processstart并尝试在这些进程之间传递数据。一切正常,但内存限制困扰我。 100mb对我的目的是不够的。有没有办法延长限制,因为这样做对我来说更加方便?如果这不能完成,如何组装文件路径?我试图在第一篇文章中手动编写url,然后直接用'GetCurrentDirectory'方法尝试,但似乎我不能在参数参数中使用它。 – 2013-05-13 07:37:21