2017-10-11 35 views
-1

我是PowerShell的新手。有沒有在C#中調用mysql.exe和使用Powershell執行查詢的方法。我想執行查詢並將結果轉換爲csv文件。使用C#中的PowerShell執行MySql查詢#

.\mysql.exe -C -B --host=amazonaws -P 3306 --user=user --password=pass --database=MyDB --execute="SELECT * FROM MyTable LIMIT 5" | Out-File "C:\output.sql" 

using (PowerShell PowerShellInstance = PowerShell.Create()) 
{   
    ???? 
    PowerShellInstance.Invoke(); 
} 

感謝

+0

爲什麼混合C#和PowerShell一起連接到MySQL數據庫?您可以從C#[很容易]連接到MySql數據庫(https://stackoverflow.com/q/21618015)。 – vonPryz

+0

使用正確的[API](https://dev.mysql.com/downloads/connector/net/)而不是在C#中的PowerShell中運行命令行程序。 –

+0

@vonPryz我們目前的解決方案有一個使用C#定義好的數據訪問層,但是對於這個特定的任務,他們希望它有一個單獨的控制檯來運行命令,然後使用powershell隱藏到csv。我爲cmd/mysql.exe使用Process.Start(新的ProcessStartInfo),但後來他們要求使用Powershell來隱藏結果,並且我被卡住了。 – DrkDev

回答

0

過程中使用C#更容易,但他們希望它有一個PowerShell腳本

private static void GenerateNewInputFile(
     string server, 
     string user, 
     string password, 
     int port, 
     string database, 
     string query, 
     string mysqlLocation, 
     string outputFilePath) 
    { 
     using (var powershell = PowerShell.Create()) 
     { 
      var sb = new StringBuilder(); 
      sb.Append($"$server = \"{server}\"\n"); 
      sb.Append($"$user = \"{user}\"\n"); 
      sb.Append($"$password = \"{password}\"\n"); 
      sb.Append($"$port = {port}\n"); 
      sb.Append($"$db = \"{database}\"\n"); 
      sb.Append($"$query = \"{query}\"\n"); 
      sb.Append($"$mysql = \"{mysqlLocation}\"\n"); 
      sb.Append("$params = \"-C\",\"-B\",\"-h$server\",\"-P$port\",\"-u$user\",\"-p$password\",$db,\"-e$query\"\n"); 
      sb.Append($"& $mysql @params | Out-File \"{outputFilePath}\"\n"); 

      powershell.AddScript(sb.ToString()); 

      powershell.Invoke(); 
     } 

    }