получение исключения при вызове функции

#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){