【问题标题】:using mysqldump on process.start nothing happens, but when I try the argument on cmd it is working在 process.start 上使用 mysqldump 没有任何反应,但是当我在 cmd 上尝试参数时它正在工作
【发布时间】:2016-04-14 08:24:47
【问题描述】:

我花费数小时解决此问题。我有这个代码

    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 上执行它可以工作。

我该如何解决这个问题?

【问题讨论】:

  • 我对小于的使用感到惊讶,我本以为大于
  • 哦,对不起!这只是一个错字。
  • :) 好的,这很公平,在这种情况下您是否尝试过使用 process.StandardOutput 选项打开流并写入等等?
  • 谢谢!我没试过。我熟悉使用process.StandardOutput。会更好吗?
  • Cary 下面的解决方案应该也可以工作——但是有一个标准输入和一个标准输出,你可以像使用它们一样使用它们 | mycommand 和 mycommand > 东西没有mysql 不能在这里安装(大哥在看)测试,但是收集输出并用它做点什么是一个很好的方法..

标签: mysqldump process.start


【解决方案1】:

虽然这不使用 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 数据,将它们全部存储在一个字符串中可能会要求很多,但输出是一个流,因此实际上您可以进一步工作并更直接地使用流并逐块输出

【讨论】:

【解决方案2】:

根据BugFinder的建议,我现在可以使用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

如果你想改成import,只需把这行代码改成你想要的mysqldump导出命令即可:

myStreamWriter.WriteLine("mysql -u  root  sample_db < " & drive_name & "\" & db_name)

导出命令示例

myStreamWriter.WriteLine("mysql -u  root  sample_db > " & drive_name & "\" & db_name)

【讨论】:

    【解决方案3】:

    In this link 一位用户建议将&gt; 更改为-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 & """"
    

    它会工作

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2023-02-07
      • 2018-06-23
      • 2019-05-08
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多