我有一个powershell脚本,我在其中将SQL Select加载到DataTable
中。
[当我将查询设置为仅返回1行,然后执行DataTable.Rows.Count
时,它将打印0行。
[当我将查询设置为返回2行,然后执行DataTable.Rows.Count
后,它将打印2行。
我可以看到
DataTable
中有0行数据,因为我可以我的DataTable
上有一个循环。因此它仍然会获取数据,只是打印0
那么为什么我的伯爵说1行为0?
如果我用C#做一个简单的DataTable并添加1行。它计数为1。
Powershell
function ExecuteSqlQuery ($Server, $DB, $user, $pw, $SQLQuery) {
$Datatable = New-Object System.Data.DataTable
$Datatable.Clear()
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "Server = $Server; Database = $DB; Integrated Security = False; User ID = $user; Password = $pw;Connection Timeout=0"
$Connection.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$Command.CommandTimeout = 0
$Command.CommandText = $SQLQuery
Write-Host $SQLQuery
Write-Host "Starting to read sql"
$Reader = $Command.ExecuteReader()
Write-Host "Read of SQL success"
$Datatable.Load($Reader)
Write-Host "Datatable loaded with data"
$Connection.Close()
return $Datatable
}
Write-Output $query
$resultsDataTable = New-Object System.Data.DataTable
$resultsDataTable = ExecuteSqlQuery -Server $SQLServer -DB $SQLDBName -user $uid -pw $pwd -SQLQuery $query
Write-Output ("Meta Table contains: " + $resultsDataTable.Rows.Count + " rows")
C#
static void Main()
{
// Get the DataTable.
DataTable table = GetTable();
int s =table.Rows.Count;
}
static DataTable GetTable()
{
// Here we create a DataTable with four columns.
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Rows.Add(25);
return table;
}
请检查$ resultsDataTable的类型。
Write-Host $resultsDataTable.GetType()
我有类似的问题,当只返回一行时,Powershell似乎将对象的类型更改为System.Data.DataRow。
类型更改发生在函数返回对象之后。在您的示例中,函数“ ExecuteSqlQuery”内部仍然是System.Data.DataTable。
也,您对$ resultsDataTable的声明
$resultsDataTable = New-Object System.Data.DataTable
这是不必要的,因为当您从ExecuteSqlQuery Function返回结果时,几乎在脚本的下一行中将覆盖这个新创建的对象。