使用Powershell

时间:2015-12-10 11:00:34

标签: mysql powershell stored-procedures

我对Powershell完全陌生,所以我对如何调用带参数的SQL过程感到有些困惑。我已经成功打开了与数据库的连接,并且我设法获得了一个不会使参数工作的程序,所以我知道连接正常。

添加参数并运行查询的代码如下:

$dateToUse = Get-Date -f yyyy/MM/dd
$MysqlQuery.CommandText = "GetJourneyByDepartureDate"
$MysqlQuery.Parameters.AddWithValue("_departureDate", $dateToUse)
$queryOutput = $MysqlQuery.ExecuteReader()

每当我尝试运行我的脚本时,我都会收到错误消息

Incorrect number of arguments for PROCEDURE dbo.GetJourneyByDepartureDate; expected 1, got 0

我一直在寻找解决方案,但我对Powershell了解不足以了解哪些解决方案可能是正确的。

此外我无法发布SQL查询,但我已经设法通过在HeidiSQL中运行查询手动传递争论多次运行该程序

编辑:

我现在稍微更改了我的代码,现在看起来像这样:

$MysqlQuery.CommandText = "GetJourneyByDepartureDate"
$MysqlQuery.Parameters.Add("@_departureDate", [System.Data.SqlDbType]::Date) | out-Null
$MysqlQuery.Parameters['@_departureDate'].Value = $dateToUse
$parameterValue = $MysqlQuery.Parameters['@_departureDate'].value

Write-Host -ForegroundColor Cyan -Object "$parameterValue";
$queryOutput = $MysqlQuery.ExecuteReader()

我在Write-Host行的控制台上获得$ dateToUse值输出,但我仍然得到与之前相同的错误参数数量错误。 SP声明如下:

CREATE PROCEDURE `GetJourneyByDepartureDate`(IN `_departureDate` DATE) READS SQL DATA

1 个答案:

答案 0 :(得分:2)

最后我发现我需要将CommandType设置为StoredProcedure,我还需要添加参数,但我错过了方向,显然我必须在' @&#39之后添加一个空格;但我不确定为什么。我的解决方案如下:

    $MysqlCommand = New-Object MySql.Data.MySqlClient.MySqlCommand.Connection = $connMySQL               #Create SQL command
    $MysqlCommand.CommandType = [System.Data.CommandType]::StoredProcedure;                              #Set the command to be a stored procedure

    $MysqlCommand.CommandText = "GetJourneyByDepartureDate";                                         #Set the name of the Stored Procedure to use
    $MysqlCommand.Parameters.Add("@ _departureDate", [System.Data.SqlDbType]::Date) | out-Null;          #Set the input and output parameters
    $MysqlCommand.Parameters['@ _departureDate'].Direction = [system.data.ParameterDirection]::Input;    #Set the _departureDate parameter to be an input parameter
    $MysqlCommand.Parameters['@ _departureDate'].Value = $dateToUse;                                     #Set the _departureDate parameter value to be dateToUse