Powershell DataTable的第一行计数为0

我有一个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;
        }
waitwat 回答:Powershell DataTable的第一行计数为0

请检查$ resultsDataTable的类型。

Write-Host $resultsDataTable.GetType()

我遇到了类似的问题,当只有一行返回时,Powershell似乎将对象的类型更改为System.Data.DataRow。

在函数返回对象之后发生类型更改。在您的示例中,函数“ ExecuteSqlQuery”内部仍然是System.Data.DataTable。

此外,您对$ resultsDataTable的声明

$resultsDataTable = New-Object System.Data.DataTable

是不必要的,因为当您从ExecuteSqlQuery Function返回结果时,这个新创建的对象几乎立即在脚本的下一行中被覆盖。

本文链接:https://www.f2er.com/3140948.html

大家都在问