#powershell
#powershell
Вопрос:
если я вызываю функцию, я получаю исключение
Я использую возвращаемое значение в цикле for
2020-08-19T09:25:31.6470906Z row count:: 1
2020-08-19T09:25:31.6495736Z row count:: trns 1 System.Data.DataRow
2020-08-19T09:25:31.7884278Z ##[error]Cannot compare "System.Data.DataRow" because it is not IComparable.
2020-08-19T09:25:33.4007345Z ##[error]PowerShell exited with code '1'.
function getResultlist($sqlquery ){
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $sqlserver; Database = $sqldatabasename; User ID = $sqlusername; Password = $sqlpassword; Connection Timeout=0"
$sqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $sqlquery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$rowCount = $DataSet.Tables[0].Rows.Count
Write-Host "row count::" $rowCount
return $DataSet.Tables[0].Rows
Я использую эту функцию следующим образом. Я получаю результат этой функции в переменную и использую в цикле for
$rowCountTrn = getResultlist($testQuery)
Write-Host "row count:: trns" $rowCountTrn
if ($rowCountTrn -gt 0) {
$mailtabData = $null
foreach ($row in $rowCountTrn ) {
$mailtabData = "<tr><td>" $row[0] "</td><td>" $row[1] "</td><td>" $row[2] "</td></tr>"
$sendemail = $true
}
}
Комментарии:
1. Что такое сообщение об исключении? Пожалуйста, вставьте полное сообщение об ошибке.
2. Можете ли вы показать код, который вы используете для вызова / выполнения функции при получении ошибки?
Ответ №1:
Ошибка вызвана этим утверждением:
if($rowCountTrn -gt 0){
Когда PowerShell видит -gt
оператор сравнения, он должен найти способ сравнить два значения. Левый операнд $rowCountTrn
представляет собой массив DataRow
объектов и DataRow
не является сопоставимым типом (он не реализует IComparable
интерфейс), поэтому выражение завершается ошибкой, которую вы видите.
Если вы хотите убедиться, что была возвращена хотя бы одна строка данных, используйте Count
:
if($rowCountTrn.Count -gt 0){