Запустите хранимую процедуру MySql Script против MySQL, используя Powershell - PullRequest
0 голосов
/ 19 октября 2018

Я хочу выполнить хранимую процедуру MySQL на сервере MySQL 5.6, который является средой QA.Это является частью реализации Continuous Delivery с помощью конвейеров Azure.

Например: мой файл .sql содержит несколько хранимых процедур, которые успешно выполняются MySQL Workbench, но тот же файл, который я хочу выполнить через PowerShell.

.sql:

DROP procedure IF EXISTS `test`;

DELIMITER //

CREATE PROCEDURE `test` ()
BEGIN
select * from organisations;
END 
//

DELIMITER ;

DROP procedure IF EXISTS `test1`;

DELIMITER //

CREATE PROCEDURE `test1` ()
BEGIN
select * from organisations;
END 
//

DELIMITER ;

Код сценария PowerShell:

[System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")

[string]$sMySQLUserName = 'xxx'
[string]$sMySQLPW = 'xxx'
[string]$sMySQLDB = 'xxx'
[string]$sMySQLHost = 'localhost'
[string]$sConnectionString = "server="+$sMySQLHost+";port=3306;uid=" + $sMySQLUserName + ";pwd=" + $sMySQLPW + ";database="+$sMySQLDB 

$oConnection = New-Object MySql.Data.MySqlClient.MySqlConnection($sConnectionString)
$Error.Clear()
try
{
    $oConnection.Open()
    write-host "Connection opened"
}
catch
{
    write-warning ("Could not open a connection to Database $sMySQLDB on Host $sMySQLHost. Error: "+$Error[0].ToString())
}

#$oTransAction=$oConnection.BeginTransaction()
$oMYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$oMYSQLCommand.Connection=$oConnection
#$oMYSQLCommand.Transaction=$oMYSQLTransaction
#$sql = Get-Content D:\Release\ConsoleDev\SqlScript\testprocedure.sql
$sql = [io.file]::ReadAllText('D:\Release\ConsoleDev\SqlScript\testprocedure - Copy.sql')
$oMYSQLCommand.CommandText = $sql
write-host $sql
try
{
$iRowsAffected=$oMYSQLCommand.executeNonQuery()

 }
 catch
{
    write-warning ("ERROR occured while ExecuteNonQuery")

}
# Do some Inserts or updates here and commit your changes

finally
{

$oConnection.Close()
write-host "Closing Connection"
}

PowerShell выдает следующую ошибку:

ПРЕДУПРЕЖДЕНИЕ: ОШИБКА произошла во время ExecuteNonQuery

Я думаю, что проблема в выполнении DELIMITER //.

1 Ответ

0 голосов
/ 22 января 2019

Я решил проблемы со следующими изменениями: 1) $ oMYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlScript 2) $ oMYSQLCommand.Query = $ sql 3) $ oMYSQLCommand.Execute () и, наконец, он был выполнени хранится в моей БД.-

...