gpt4 book ai didi

mysql - 在powershell中执行sql存储过程时参数值中有空格

转载 作者:行者123 更新时间:2023-11-29 12:43:10 25 4
gpt4 key购买 nike

我在发送 msyql 命令来执行存储过程时遇到问题。

这是我正在使用的代码,我创建了一个名为 set-outage 的 cmdlet。它设置了参数,其中唯一重要的代码就是这两行。其他一切都处理之后发生的事情。它在 ExecuteNonQuery 行上出错。

$query = New-Object Mysql.data.mysqlclient.mysqlcommand("set_outage('$system','$startd','$startt','$endd','$endt','$changes','$user')", (invoke-mysql))
$rdr = $query.ExecuteNonQuery()

我的所有参数都设置为

[string]$variable

存储过程是

CREATE DEFINER=`root`@`localhost` PROCEDURE `set_outage`(in system varchar(55), in startd varchar(25), in startt varchar(25), in endd varchar(25), in endt varchar(25),  in changes longtext, in user varchar(55))

BEGIN
Insert into to_process (node_name, User_Requested, Start_date, Start_time, End_Date, End_time, Started ) Values (system, user, startd, startt, endd, endt, 'no');
end

MySQL 允许将文本值存储在日期和时间字段中,因此不必担心。我知道此命令中未使用更改,但在我解决此问题后将会使用更改。

这里有两个例子......一个有效......另一个无效。

set-outage -system viper12 -startd 2014/12/12 -startt 12:00 -endd 2014/12/17 -endt 17:00 -user 'Daniel asdfsdaf' -changes 'test'

返回的错误:

Exception calling "ExecuteNonQuery" with "0" argument(s): "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set_outage('viper12','2014/12/12','12:00','2014/12/17','17:00','test','Daniel as' at line 1" At N:\NOC\Powershell Scripts\testingmysql.ps1:194 char:9 + $rdr = $query.ExecuteNonQuery() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : MySqlException

如果我只是删除多余的单词或空格,如下所示:

set-outage -system viper14 -startd 2014/12/12 -startt 12:00 -endd 2014/12/17 -endt 17:00 -user 'Daniel' -changes 'aasdfsadfsadfsadfasfsdfsadfsatest'

我不再收到错误消息。我在它们周围放置了“”,在它们周围使用了“”。我尝试将输入转换为here_strings,我使用了反引号......我所做的一切似乎都不允许空格。我什至尝试使用 @query.prepare() 但这也没有帮助。我也尝试过单引号 MySQL 中的变量。没有运气。

如果我直接输出 $query 它看起来像这样。

LastInsertedId    : 0
CommandText : set_outage('viper12','2014/12/12','12:00','2014/12/17','17:00','test','Daniel asdfsdaf')
CommandTimeout : 30
CommandType : Text
IsPrepared : False
Connection : MySql.Data.MySqlClient.MySqlConnection
Parameters : {}
Transaction :
EnableCaching : False
CacheAge : 0
UpdatedRowSource : Both
DesignTimeVisible : False
Site :
Container :

如果我获取命令文本并直接在 MySQL 中使用它,它就可以完美工作。我似乎找不到引用数据的正确方法,显示它将在变量中传递空格。你能为我指出正确的方向吗?这对我来说可能是一个愚蠢的忽视..但我对这个东西还是有点陌生​​,所以要温柔:)

最佳答案

据我所知,这似乎是我传递信息的方式。

可能是错误的...但这种方法是有效的...通过这种方式设置参数而不是在命令字符串中传递它们。

$query = New-Object Mysql.data.mysqlclient.mysqlcommand("set_outage", (invoke-mysql))
$query.CommandType = [System.Data.CommandType]'StoredProcedure'
$query.Parameters.Add("user","$user")
$query.Parameters.Add("system","$system")
$query.Parameters.Add("changes","$changes")
$query.Parameters.Add("startd","$startd")
$query.Parameters.Add("startt","$startt")
$query.Parameters.Add("endd","$endd")
$query.Parameters.Add("endt","$endt")

如果我的 mysql 命令中的 sql 命令中有空格,这似乎只是一个问题。

我使用以下命令对此进行了测试:

set-outage -system viper3 -startd 2014/12/12 -startt 12:00 -endd 2014/12/17 -endt 17:00 -changes 'this is a test with lots of spaces' -user 'Daniel Peel' 

我没有遇到任何问题,它运行并且存储过程按预期工作。任何额外的意见总是受欢迎的。

关于mysql - 在powershell中执行sql存储过程时参数值中有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com