【问题标题】:Run a MySql stored procedure Script Against MySQL using Powershell使用 Powershell 针对 MySQL 运行 MySql 存储过程脚本
【发布时间】:2019-01-22 16:37:36
【问题描述】:

我想在作为 QA 环境的 MySQL 5.6 服务器上执行 MySQL 存储过程。这是通过 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 //的问题。

【问题讨论】:

  • 目前,您正在使用 try..catch 隐藏真正的错误输出。将Write-Error $_ 添加到您的catch 块中以查看实际错误是什么。
  • 谢谢 Mark,我添加了 write-Error $_ 输出的错误是 Error running MySQL command: Exception calling "ExecuteNonQuery" with "0" argument(s): "You have an error in您的 SQL 语法;查看与您的 MySQL 服务器版本相对应的手册,以在“DELIMITER $$ CREATE PROCEDURE test () BEGIN select * from organizations; END$' at line 1" + CategoryInfo 附近使用正确的语法 + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,DevVM- 107-MySql.ps1
  • 我已经通过以下更改解决了问题 - 1)$oMYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlScript 2) $oMYSQLCommand.Query = $sql 3) $oMYSQLCommand.Execute() 和最后它已被执行并存储在我的数据库中。

标签: mysql powershell azure-devops


【解决方案1】:

我已通过以下更改解决了问题 - 1)$oMYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlScript 2) $oMYSQLCommand.Query = $sql 3) $oMYSQLCommand.Execute() 最后它已被执行并将过程存储在我的数据库中。 ——

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多