我正在研究一个Powershell脚本,该脚本需要来自mySQL数据库的一些输入。对于我的一生,我无法在这里说出我做错了什么。
每隔一次我运行此脚本,都会收到错误Exception calling "Open" with "0" argument(s): "Out of sync with server"[0]
。因此,在第一次运行时,它将提取预期的数据并将其转储到我的屏幕上,然后在下一次运行中,我得到该错误。而且循环只是重复。这是我的完整代码(现在它只是一个测试查询,用于提取然后转储数据。如果重要,则mySQL服务器在Ubuntu 18.04主机上运行MariaDB 10.3.14。
$error.Clear()
$sqlQuery = get-content -path "C:\querytext.sql" -Raw
$sqlUser = "myuser"
$sqlPass = "mypass"
$sqlHost = "myserver"
$sqlDB = "dbname"
$connectionString = "server= $sqlHost;port=3306;uid=$sqlUser;pwd=$sqlPass;database=$sqlDB"
Try{
$connection = New-Object MySql.data.MySqlClient.MySqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$command = New-Object MySql.data.MySqlClient.MySqlCommand($sqlQuery,$connection)
$dataAdapter = New-Object MySql.data.MySqlClient.MySqlDataAdapter($command)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.fill($dataSet, "data") | Out-Null
$command.Dispose()
$sqlResults = $dataSet.tables["data"]
}
Catch {
Write-Host "ERROR : Unable to run query : $query `n$Error[0]"
}
$connection.close()
$sqlResults | Format-Table
$sqlResults | ForEach-Object {
write-host $_.fname
}
答案 0 :(得分:0)
我建议使用SQL PS模块:
https://docs.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-2017
该页面包含安装说明及其来自Microsoft的说明。就个人而言,您正在使用的dotnet类可以工作,但是使用起来却相对困难。
使用此模块连接数据库更为简单,您不必担心微管理连接。
Invoke-Sqlcmd -ServerInstance $sqlHost -Query $sqlQuery -Database $sqlDB -Username $sqlUser -Password $sqlPass
这将像其他所有PS cmdlet一样返回PS对象。