在控制台应用程序中加载cmd

时间:2014-10-02 10:15:07

标签: c# mysql .net command-line

我有一个控制台应用程序,它执行一些命令并输出一些日志。

我需要输出显示命令及其结果,如下所示:

>Loading the database...
>mysql -uUser -pPassword myDbName < mydumpFile
ERROR 1045 (28000): Access denied for user 'User'@'localhost' (using password: Y
ES)
>End loading the databse...

我做了以下事情:

void ImportData()
{
    Program.Log("INFO", "Start importing data... <<<");

    Process myProcess = new Process();
    string mySqlArgs = string.Format(" -u{0} -p{1} {2} < \"{3}\"", 
                                      bddUser, bddPassword, databaseName, dumpPath);
    ProcessStartInfo myProcessStartInfo = 
                                      new ProcessStartInfo("mysql", mySqlArgs);
    myProcessStartInfo.UseShellExecute = false;
    myProcessStartInfo.RedirectStandardOutput = true;
    myProcess.StartInfo = myProcessStartInfo;
    myProcess.Start();

    StreamReader reader = myProcess.StandardOutput;
    string theOutput = reader.ReadToEnd();
    if (theOutput.Length > 0)
        Program.Log("SQL", theOutput);

    Program.Log("INFO", "END importing data >>>");
}

但是这段代码

1)不显示命令本身(只是结果)
  2)请求可能应该是格式错误的,因为结果就像mysql命令中的格式错误

更新:新代码更好一点

Program.Log("INFO", "Start importing Materials... <<<".Fill(code));

Process cmd = new Process();

cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;

cmd.Start();            

/* execute "mysql -uUser -pPassword base < dump" */
string mySqlCommand = "mysql -u{0} -p{1} {2} < \"{3}\"";
cmd.StandardInput.WriteLine(mySqlCommand, bddUser, bddPassword, databaseName, dumpPath);
cmd.StandardInput.Flush();
cmd.StandardInput.Close();

StreamReader reader = cmd.StandardOutput;
string theOutput = reader.ReadToEnd();
if (theOutput.Length > 0)
    Program.Log("SQL", Environment.NewLine + theOutput);

Program.Log("INFO", "END importing Materials >>>".Fill(code));

,但无论如何,它会显示cmd.exe首次执行的附加信息(之前的 mysql命令)以及命令行之后的 mysql命令结果...

1 个答案:

答案 0 :(得分:0)

执行脚本

 mysql -vvv -uUser ...

此选项将在执行脚本期间显示查询。

至于你的其他问题:为什么要调用cmd.exe?只需直接从程序中调用mysql.exe并跳过shell ...