我试图从PowerShell中读取Oracle中的表,并希望将它们保存在ArrayList中。连接正在运行,但在第一行之后读取任何行都不起作用。
这就是我想要做的事情。
$rows = New-Object System.Collections.ArrayList
class Table {
[String] $name
[String] $type
}
try {
$oraConn.Open()
$sql = [string]::Format("select name, type from source_table where type = 'running'")
$oraCmd = New-Object System.Data.OracleClient.OracleCommand($sql, $oraConn)
$reader = $oraCmd.ExecuteReader()
#add tables to arraylist
while ($reader.Read()) {
$table = New-Object Table
$table.name = $reader["name"];
$table.type = $reader["type"];
[void]$rows.Add($table)
}
Write-Host "rows collected"
}
我的问题是,我只读了表的第一行,我怎么能告诉Oracle全部读取它们?我是否必须首先count
然后查询每一行?
我在代码后面检查了$rows
的内容,因为我知道这个部分有效,所以它与问题无关,所以我把它留了下来。
我知道我的查询返回了一些内容,因为我在Oracle中尝试过它。
我需要foreach
循环吗?这有意义,但我怎么能告诉Oracle这样做呢?我是否必须查询表的每一行并设置一个计数器,一次只查询一行?
我希望有人可以帮助我,并指出我正确的方向,因为我已经尝试了很长时间让我的脚本正常工作。我得到了我的脚本的大部分逻辑,但是如果我无法将行加载到我的列表中,那么我的逻辑根本无法帮助我。
答案 0 :(得分:0)
使用以下代码段作为自己解决方案的基础:
$cs = 'data source=oradb;user id=/;dba privilege=sysdba'
$oc = new-object oracle.dataaccess.client.oracleconnection $cs
$oc.open()
$cm = new-object oracle.dataaccess.client.oraclecommand
$cm.connection = $oc
$cm.commandtext = "select name, type from source_table where type = 'running'"
$da = new-object oracle.dataaccess.client.oracledataadapter
$da.selectcommand = $cm
$tbl = new-object data.datatable
$da.fill($tbl)
$tbl | %{"$($_.name = $_.type)"}