我花了几个小时来解决这个问题。我有这个代码
Dim drive_name As String = Directory.GetCurrentDirectory & "\database"
Dim db_name As String = "sample_db.sql"
Dim argument As String = "-u root sample_db table1 > """ & drive_name & "\" & db_name & """"
Try
Diagnostics.Process.Start("C:\xampp\mysql\bin\mysqldump.exe", argument)
Console.WriteLine("Argument: " & argument)
Catch ex As Exception
Console.WriteLine("Error: " & ex.ToString)
End Try
通过查看console.writeline
,它的输出是这样的
-u root sample_db table1 > "C:\Users\MyName\Desktop\MyProjectPath\bin\Debug\database\sample_db.sql"
但是通过检查C:\Users\MyName\Desktop\MyProjectPath\bin\Debug\database\
我看不到sample_db.sql
,所以我打开mysqdump复制 console.writeline
并将其粘贴到 cmd。我现在在 mysqldump 上有这个
C:\Users\MyName>C:\xampp\mysql\bin\mysqldump -u root sample_db table1 > "C:\Users\MyName\Desktop\MyProjectPath\bin\Debug\database\sample_db.sql"
通过在 mysqldump 上执行它可以工作。
我该如何解决这个问题?
最佳答案
虽然这不使用 mysql(因为我没有),但原则适用。
Process p = new Process();
p.StartInfo.FileName = @"c:\windows\system32\ipconfig.exe";
p.StartInfo.Arguments = @"/all";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
String output = p.StandardOutput.ReadToEnd();
File.WriteAllText(@"c:\log.txt",output);
p.WaitForExit();
在 log.txt 中是我预期的输出。
所以在你的情况下,你在文件名中有 mysqldump 命令,在参数中有参数,并将 writealltext 更改为你的输出文件
很明显,如果您愿意,您可以使用它来发挥更大的创意,例如大小可能是一个问题,毕竟如果您有 GB 的数据,将其全部存储在一个字符串中可能要求有点高,但输出是一个流,所以实际上你可以进一步工作并更直接地使用流并逐 block 输出
关于mysql - 在 process.start 上使用 mysqldump 没有任何反应,但是当我在 cmd 上尝试参数时它正在工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36617516/