微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将Powershell变量传递给MySQL

如何解决将Powershell变量传递给MySQL

我正在使用Simplysqlhttps://github.com/mithrandyr/SimplySql)从Powershell访问MysqL我有一个脚本可以获取昨天的日出和日落时间。我接下来要做的是将这些变量传递到MysqL脚本中,以从这些小时之间提取相应的值列。但是,我缺少一些东西。

日出/日落:

$yesDate = (Get-Date).AddDays(-1) | Get-Date -Format "yyyy-MM-dd"
$daylight = (Invoke-RestMethod "https://api.sunrise-sunset.org/json?lat=35.608237&lng=-78.647497&formatted=0&date=$esDate").results
$sunrise  = ($daylight.Sunrise | Get-Date -Format "HH:mm:ss")
$sunset   = ($daylight.Sunset | Get-Date -Format "HH:mm:ss")

MySQL查询

CD "C:\Program Files\MysqL\MysqL Server 5.7\bin"
Open-MysqLConnection -UserName xxxxxxx -Password -Database xxxxxxxx
Invoke-sqlQuery -Query "select LogDateTime,UVindex from `monthly_new` where LogDateTime between (curdate()) - interval 1 day and (curdate())"
Close-sqlConnection

现在,分别运行每个变量,分别设置变量,并返回昨天上午12点至晚上11:59的所有值。但是,如果我尝试将$ sunrise和$ sunset变量集成到mySQL查询中,则不知道发生了什么。这可能只是一个简单的语法问题,但我不确定。

解决方法

正确的方法是避免在SQL查询文本中插入参数。

从Oracle中获取MySQL .Net connector(实际上,整个安装过程中您只需要MySql.Data.dll个文件)

然后供SELECT使用DataAdapter。它接受连接字符串和SQL命令。
ConnectionString可能包含参数。
然后添加带有值的参数。
然后创建DataSet并使用适配器填充它。
dataset.tables[0]一起使用,并与具有属性的对象数组一起使用。

类似的事情,我现在没有要测试的MySQL。

Add-Type -Path "C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.21\Assemblies\v4.5.2\MySql.Data.dll"

$sqlCommandSelect = 'select LogDateTime,UVindex from `monthly_new` where LogDateTime between @param1 and @param2'
$sqlConnString = 'server=server;user=user;database=db;password=*****;"'

$dataAdapter = [MySql.Data.MySqlClient.MySqlDataAdapter]::new($sqlCommandSelect,$sqlConnString)
$dataAdapter.SelectCommand.Parameters.AddWithValue('@param1',[DateTime]::Today.AddDays(-1))
$dataAdapter.SelectCommand.Parameters.AddWithValue('@param2',[DateTime]::Today)

$dataSet = [System.Data.DataSet]::new()
$numRecords = $dataAdapter.Fill($dataSet)
foreach ($row in $dataSet.Tables[0])
{
    Write-Host "$($row.LogDateTime)`t$($row.UVindex)"
}

$dataSet.Dispose()
$dataAdapter.Dispose()

或者,您可以直接将变量写入SQL查询,但是您需要以MySQL可接受的格式编写变量。我想这是o格式:

$query = "select ...  '($($date1.ToString('o')))' and '($($date2.ToString('o')))'"

类似的事情,我不确定($($ ....))周围的报价

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。