Я использую функцию, которая собирает данные с сервера SQL:
function Invoke-SQLCommand {
param(
[string] $dataSource = "myserver",
[string] $dbName = "mydatabase",
[string] $sqlCommand = $(throw "Please specify a query.")
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = `
"Server=$dataSource;Database=$dbName;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $sqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
}
Отлично работает, но возвращает только одну таблицу. Я передаю несколько операторов Select, поэтому набор данных содержит несколько таблиц.
я заменил
$DataSet.Tables[0]
с
for ($i=0;$i -lt $DataSet.tables.count;$i++){
$Dataset.Tables[$i]
}
но консоль показывает только содержимое первой таблицы и пустые строки для каждой записи того, что должно быть второй таблицей. Единственный способ увидеть результат - изменить код на
$Dataset.Tables[$i] | out-string
но я не хочу строки, я хочу иметь табличные объекты для работы.
Когда я присваиваю то, что возвращает Invoke-SQLCommand, переменной, я вижу, что у меня есть массив объектов datarow, но только из первой таблицы. Что случилось со вторым столом?
Любая помощь будет принята с благодарностью.
Спасибо