2015-06-05 4 views
4

Я хочу импортировать файл csv в mongodb с помощью mongoimport в C#. Поэтому я реализую этот методКоманда cmd в C#

public bool importCSV(string filepath, string db, string collectionName){ 

     string result=""; 
     try 
     { 
      ProcessStartInfo procStart = new ProcessStartInfo("cmd", "C:/MongoDB/Server/3.0/bin/mongoimport -d " + db + " -c " + collectionName + " --type csv --file " + filepath); 
      procStart.RedirectStandardOutput = true; 
      procStart.CreateNoWindow = false; 
      Process proc = new Process(); 
      proc.StartInfo = procStart; 
      proc.Start(); 

      result += proc.StandardOutput.ReadToEnd(); 
     } 
     catch(Exception e){ 
      Console.WriteLine(e.ToString()); 
     } 
     if (!result.Equals("")){ 
      return true; 
     } 
     return false; 
    } 

Когда я запускаю команду, я могу импортировать файл в MongoDB. Но с помощью C# метод возвращает false.

Может ли кто-нибудь помочь мне решить эту проблему?

РЕШЕНИЕ !!!

public bool importCsv(string filepath, string collectionName){ 

     string result =""; 
     try 
     { 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.FileName = @"C:/MongoDB/Server/3.0/bin/mongoimport.exe"; 
      startInfo.Arguments = @" -d test -c " + collectionName + " --type csv --file " + filepath + " --headerline"; 
      Process proc = new Process(); 
      proc.StartInfo = startInfo; 
      proc.Start(); 
      result += "ddd"; 
     } 
     catch(Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
     } 

     if (!result.Equals("")) 
     { 
      return true; 
     } 
     return false; 
    } 
+1

Пробовали ли вы вызова 'proc.WaitForExit()' после 'proc.Start()'? – ANewGuyInTown

+0

@ANewGuyInTown, я попробовал, но результат не изменился. – trallallalloo

+0

извините, изначально я имел в виду 'proc.WaitForExit()' после 'proc.StandardOutput.ReadToEnd();' – ANewGuyInTown

ответ

2

попробовать что-то вроде этого:

process.StartInfo.UseShellExecute = false; 
    process.StartInfo.RedirectStandardOutput = true; 
    process.OutputDataReceived += new DataReceivedEventHandler((sender, e) => 
    { 
     if (!String.IsNullOrEmpty(e.Data)) 
     { 
      result+=e.Data; 
     } 
    }); 

    process.Start(); 

    // Asynchronously read the standard output of the spawned process. 
    // This raises OutputDataReceived events for each line of output. 
    process.BeginOutputReadLine(); 
    process.WaitForExit(); 
    process.Close(); 
Смежные вопросы