如何在 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
仍将具有它们的旧值。
我需要从文件夹中获取文件。然后,对于这些文件中的每一个,我都需要从 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
仍将具有它们的旧值。