2016-06-16 9 views
0

私はPowerShellでMySQLコネクタを使用していますが、クエリを実行してから少しデータをスクラブし、残りを同じMySQL DBの別のテーブルにダンプする必要があります。私は接続を開いたままにして、これをすべてより速く走らせることができますか?PowerShellとMySQL - 複数のクエリに対して接続を開いたままにしますか?

[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") 
     $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection 
     $Connection.ConnectionString = $ConnectionString 
     $Connection.Open() 

     $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection) 
     $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command) 
     $DataSet = New-Object System.Data.DataSet 
     $RecordCount = $dataAdapter.Fill($dataSet, "data") 
     return $DataSet.Tables[0] 
+0

あなたがそれを使用し終えたら、接続を閉じます。毎回連続して開閉する点はほとんどありません。それは単なる資源の無駄です。 –

+0

私はそれが私の主張であることを知っています。上記のコードは関数です...私はそれを明確にしないためにお詫び申し上げます。どのように私はそれを打ち破ることができるのだろうかと思っているので、私はメインのPSスクリプトで回って、必要な複数のタスクをやっているときに緊急コールをすることができるセッションを持っています。 – cbaum

答えて

0

この関数を呼び出す関数で接続オブジェクトを作成します。呼び出された関数は、呼び出し元の関数が保持しているオブジェクトを継承します。したがって、呼び出された関数では$Connectionが有効です。

function RunMe(){ 
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") 
    $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection 
    $Connection.ConnectionString = $ConnectionString 
    $Connection.Open() 

    # Call the function that executes the MySQL code 
    ExecuteMySQL 

    # If needed, call another function that executes the MySQL code 
    ExecuteSomeOtherMySQL 

    # Close the connection after all MySQL operations are complete 
    $Connection.Close() 
} 

function ExecuteMySQL(){ 
    $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection) 
    $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command) 
    $DataSet = New-Object System.Data.DataSet 
    $RecordCount = $dataAdapter.Fill($dataSet, "data") 
    return $DataSet.Tables[0] 
} 
関連する問題