Powershell DataTable的第一行计数为0

问题描述 投票:1回答:1

我有一个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;
        }
c# powershell datatable
1个回答
0
投票

请检查$ resultsDataTable的类型。

Write-Host $resultsDataTable.GetType()

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

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

也,您对$ resultsDataTable的声明

$resultsDataTable = New-Object System.Data.DataTable

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

© www.soinside.com 2019 - 2024. All rights reserved.