2016-06-16 6 views
0

Я использую соединитель MySQL с PowerShell, и мне нужно сделать запрос, затем немного скрасить данные, а затем выгрузить остаток в другую таблицу в том же БД MySQL. Как я могу оставить соединение открытым, чтобы все это работало быстрее?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] 
} 
Смежные вопросы