Я использую следующую функцию PowerShell, чтобы выполнить произвольный запрос SQL к экземпляру SQL Server, а затем вернуть все имеющиеся там данные:
Function ExecSQLReader([string] $sqlText) {
$cn = New-Object System.Data.SqlClient.SqlConnection
$cn.ConnectionString = "Data Source={0};Initial Catalog={1};Integrated Security=SSPI;" -f $fc.server,$fc.database
$cn.Open()
$cmd = $cn.CreateCommand()
$cmd.CommandText = $sqlText
$cmd.CommandTimeout = 60
$resTable = New-Object("System.Data.DataTable")
try {
$result = $cmd.ExecuteReader()
$resTable.Load($result)
$result.Close()
$cn.Close()
} catch {
"=======ERROR in ExecSQLReader========" | DoLog
"Message: {0}" -f $_.Exception.Message | DoLog
"SQL: {0}" -f $sqlText | DoLog
"=======/ERROR in ExecSQLReader=======" | DoLog
}
return($resTable)
}
Функция работает нормально, когда данные возвращаются запросом.
Однако функция не возвращает никакой информации, связанной со столбцами, когда по запросу не возвращаются данные.
Мне нужно знать имена / типы / порядок столбцов, даже если их нетстроки данных.
Я вижу, что возвращаемое значение отличается в зависимости от результирующего количества записей (что еще более усложняет ситуацию):
- пустой результат для 0 записей
- a [DataRow] объект для отдельной записи
- Коллекция объектов [DataRow] для более чем 1 записи
Итак, вопрос: как убедиться, чтовозвращаемый объект всегда имеет тип «System.Data.DataTable»?
Или, по крайней мере, как убедиться, что информация, связанная со столбцами (имена, типы, порядок) всегда доступна в функциирезультаты, независимо от количества строк, возвращаемых запросом?
Любые подсказки?