如何在 Powershell 中 refresh\reinitiate Oracle 对象 reader?

How to refresh\reinitiate Oracle object reader in Powershell?

我需要从文件夹中获取文件。然后,对于这些文件中的每一个,我都需要从 Oracle 数据库中的 (Description, Nc_Name) 列获取信息。 问题是当文件在文件夹中但不在数据库中时,它会提供它找到的前一个文件的数据,而不是 returning null。 我相信这是因为 something 指向以前的值并且需要清除。 例如,如果我有一个文件列表,比如 File#1、File#2、File#3、File#4。如果文件#4 不在数据库中,它将 return 文件#3 的列数据。

我已尝试重新启动、清除和处理 reader,但这没有帮助。

 Clear-Variabe -Name "reader"
 $reader.Dispose()

代码:

#Get all files
$result = $start.EnumerateDirectories() | ForEach-Object -Parallel {
    $_.GetFiles('*.EIA', $using:enum)
}
$result | Format-Table -AutoSize 

foreach($item in $result){
    $fileName = $item.BaseName
    #Oracle connection 
    Add-Type -Path C:\lib\netstandard2.1\Oracle.ManagedDataAccess.dll
    $query = "Select DESCRIPTION, NC_NAME From NC_PROGRAMS WHERE 
    NC_PROGRAMS.NC_NAME  = '$fileName' "
    $connectionString = "connectionString"
    $connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($connectionString)
    $connection.Open()
    $command = $connection.CreateCommand()
    $command.CommandText = $query
    $reader = $command.ExecuteReader()
    $rowNum = $connection.count
    Write-host "Number of rows-"$rowNum
    while($reader.Read()) {   
        $description=$reader.GetString(0)
        $fastemsFileName = $reader.GetString(1)
    }
    $reader.Dispose()
    $connection.Close()
}

对这一切还很陌生,所以在此先感谢您的帮助!

我假设这里有更多的代码来写出信息,但是 $description$fastemsFileName 没有被清除。

当文件名不存在时,$reader.Read()为null,所以while语句块:

while($reader.Read()) {   
    $description=$reader.GetString(0)
    $fastemsFileName = $reader.GetString(1)
}

不会执行,因此 $description$fastemsFileName 仍将具有它们的旧值。