在 process.start 上使用 mysqldump 没有任何反应,但是当我在 cmd 上尝试参数时它正在工作
using mysqldump on process.start nothing happens, but when I try the argument on cmd it is working
我花了好几个小时解决这个问题。我有这个代码
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 上执行它可以工作。
我该如何解决这个问题?
In this link 一位用户建议将 >
更改为 -r
所以不用
Dim argument As String = "-u root sample_db table1 > """ & drive_name & "\" & db_name & """"
您现在将拥有
Dim argument As String = "-u root sample_db table1 -r """ & drive_name & "\" & db_name & """"
它将工作!
虽然这不使用 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 中是我预期的输出。
所以在你的情况下,你在文件名中有转储命令,在参数中有参数,并将 writealltext 更改为你的输出文件
显然,如果您愿意,您可以使用它来发挥更大的创意,例如大小可能是个问题,毕竟如果您有 GB 的数据,将其全部存储在一个字符串中可能要求有点高,但是输出是一个流,所以实际上你可以进一步工作并更直接地使用流并逐块输出
根据 的建议,我现在可以使用 standardInput
和 standardOutput`
导入代码:
Try
Dim myProcess As New Diagnostics.Process()
myProcess.StartInfo.FileName = "cmd.exe"
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.WorkingDirectory = "C:\xampp\mysql\bin\"
myProcess.StartInfo.RedirectStandardInput = True
myProcess.StartInfo.RedirectStandardOutput = True
myProcess.Start()
Dim myStreamWriter As StreamWriter = myProcess.StandardInput
Dim mystreamreader As StreamReader = myProcess.StandardOutput
createDatabase()
myStreamWriter.WriteLine("mysql -u root sample_db < " & drive_name & "\" & db_name)
myStreamWriter.Close()
myProcess.WaitForExit()
myProcess.Close()
Catch ex As Exception
Console.WriteLine("Error on Import: " & ex.ToString)
End Try
如果你想将其更改为导入,只需将这行代码更改为你想要的 mysqldump 导出命令:
myStreamWriter.WriteLine("mysql -u root sample_db < " & drive_name & "\" & db_name)
导出命令示例
myStreamWriter.WriteLine("mysql -u root sample_db > " & drive_name & "\" & db_name)
我花了好几个小时解决这个问题。我有这个代码
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 上执行它可以工作。
我该如何解决这个问题?
In this link 一位用户建议将 >
更改为 -r
所以不用
Dim argument As String = "-u root sample_db table1 > """ & drive_name & "\" & db_name & """"
您现在将拥有
Dim argument As String = "-u root sample_db table1 -r """ & drive_name & "\" & db_name & """"
它将工作!
虽然这不使用 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 中是我预期的输出。
所以在你的情况下,你在文件名中有转储命令,在参数中有参数,并将 writealltext 更改为你的输出文件
显然,如果您愿意,您可以使用它来发挥更大的创意,例如大小可能是个问题,毕竟如果您有 GB 的数据,将其全部存储在一个字符串中可能要求有点高,但是输出是一个流,所以实际上你可以进一步工作并更直接地使用流并逐块输出
根据 standardInput
和 standardOutput`
导入代码:
Try
Dim myProcess As New Diagnostics.Process()
myProcess.StartInfo.FileName = "cmd.exe"
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.WorkingDirectory = "C:\xampp\mysql\bin\"
myProcess.StartInfo.RedirectStandardInput = True
myProcess.StartInfo.RedirectStandardOutput = True
myProcess.Start()
Dim myStreamWriter As StreamWriter = myProcess.StandardInput
Dim mystreamreader As StreamReader = myProcess.StandardOutput
createDatabase()
myStreamWriter.WriteLine("mysql -u root sample_db < " & drive_name & "\" & db_name)
myStreamWriter.Close()
myProcess.WaitForExit()
myProcess.Close()
Catch ex As Exception
Console.WriteLine("Error on Import: " & ex.ToString)
End Try
如果你想将其更改为导入,只需将这行代码更改为你想要的 mysqldump 导出命令:
myStreamWriter.WriteLine("mysql -u root sample_db < " & drive_name & "\" & db_name)
导出命令示例
myStreamWriter.WriteLine("mysql -u root sample_db > " & drive_name & "\" & db_name)