Строго говоря, ответ на ваш вопрос с существующим кодом:
$ds1.Tables[0].Rows[0].Val + $ds2.Tables[0].Rows[0].Val
Членами могут быть Table
и Row
вместо Tables
и Rows
.Я не могу вспомнить в данный момент.Мой синтаксис может быть не совсем правильным, но по сути это то, что вы должны сделать.Вам нужно сослаться на первую таблицу в наборе данных, затем на первую строку в таблице, а затем на первый столбец (или столбец Val) в строке.Я думаю, что вы можете просто использовать имя столбца.
Однако, поскольку вы выбираете ровно один столбец из одной строки в каждом запросе, вы также можете использовать функцию SqlCommand.ExecuteScalar()
дважды:
$cmd1=New-Object system.Data.SqlClient.SqlCommand($Query1,$conn)
$cmd2=New-Object system.Data.SqlClient.SqlCommand($Query2,$conn)
$cmd1.CommandTimeout=$QueryTimeout
$cmd2.CommandTimeout=$QueryTimeout
$val1 = $cmd1.ExecuteScalar()
$val2 = $cmd2.ExecuteScalar()
$val1 + $val2
Лично я бы использовал другой запрос, который нужно выполнить только один раз, чтобы получить оба результата:
$Date = Get-Date
$Query = @'
SELECT SUM(VAL) Val
FROM (
SELECT VAL,
ROW_NUMBER() OVER (PARTITION BY POLLID ORDER BY TTIME DESC) RN
FROM STATSDATA{0:m_d_yyyy}
WHERE POLLID IN (16267,16272)
) T
WHERE RN = 1
'@ -f $Date