我使用以下代码创建一个小型内存数据库,该数据库从 CSV 文件读取其源代码。当我使用 select 语句查询时,行数始终返回零,即使我知道记录位于数据中。
$inMemDB = New-Object System.Data.Datatable
[void]$inMemDB.Columns.Add("sEmailAddress")
[void]$inMemDB.Columns.Add("sSamAccountName")
[void]$inMemDB.Columns.Add("nPhoneNumber")
[void]$inMemDB.Columns.Add("sFirstName")
[void]$inMemDB.Columns.Add("sLastName")
[void]$inMemDB.Columns.Add("sDisplayName")
[void]$inMemDB.Columns.Add("sDepartment")
$recordCount = 0
Import-Csv $cachedEmpCSV |
ForEach-Object {
[void]$inMemDB.Rows.Add($_.'sEmailAddress',$_.'sSamAccountName',$_.'nPhoneNumber',$_.'sFirstName',$_.'sLastName',$_.'sDisplayName',$_.'sDepartment' )
}
Write-Host $inMemDB.Rows.Count
$oRs = ($inMemDB.Select("sEmailAddress = '[email protected]'"))
Write-Host $oRs.Rows.Count
If ($oRS.Rows.Count -eq 1) {
Write-Host $oRs.sSamAccountName
}
DataTable.Select
输出 DataRow[]
和 DataRow
实例没有 .Rows
属性。在您的示例中,$oRs.Rows
为空,因此$oRs.Rows.Count
也为空,应更改为简单的$oRs.Count
。
$inMemDB = [System.Data.Datatable]::new()
$inMemDB.Columns.AddRange(@('sSamAccountName', 'sEmailAddress'))
$null = $inMemDB.Rows.Add('foo', 'bar')
$result = $inMemDB.Select("sEmailAddress = 'bar'")
$result.Count # => 1