Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# powershell oracle查询-动态分配读卡器对象成员_C#_Sql_Sql Server_Oracle_Powershell - Fatal编程技术网

C# powershell oracle查询-动态分配读卡器对象成员

C# powershell oracle查询-动态分配读卡器对象成员,c#,sql,sql-server,oracle,powershell,C#,Sql,Sql Server,Oracle,Powershell,我必须使用powershell查询许多oracle数据库表。 有没有一种方法可以动态构建用于读卡器对象成员的变量 我必须指定读卡器对象成员名称,如GetInt64(3)、GetString(4)等,以便检索表中每列的值 由于我必须枚举这么多具有不同列名的表,所以写出来需要做很多工作 如何编写它,以便使用变量名而不是成员名?这是我在这个网站上的第一篇文章 这是我的问题中引用的以下代码的一部分 . . $premise=$reader.GetInt64(3) $license=$reader.Get

我必须使用powershell查询许多oracle数据库表。 有没有一种方法可以动态构建用于读卡器对象成员的变量

我必须指定读卡器对象成员名称,如GetInt64(3)、GetString(4)等,以便检索表中每列的值

由于我必须枚举这么多具有不同列名的表,所以写出来需要做很多工作

如何编写它,以便使用变量名而不是成员名?这是我在这个网站上的第一篇文章

这是我的问题中引用的以下代码的一部分

.
.
$premise=$reader.GetInt64(3)
$license=$reader.GetString(4)
$invoice_num=$reader.GetInt64(5)
.
.
.
我从这个链接中得到了这个例子(我不确定是否应该在同一个帖子上发布后续问题):


当然,您可以使用
$reader.item('columnname')
按名称获取指定列中的值

一种更加自动化的方法是创建对象,然后通过管道将它们格式化为表以进行输出

假设列名是变量名,下面是一个帮助函数,用于从读取器读取对象:

function Get-OracleDbObject
{
   param(
       [string]$Query,
       [Oracle.DataAccess.Client.OracleConnection]$Connection
   )

   $command = New-Object Oracle.DataAccess.Client.OracleCommand $Query, $Connection
   $reader = $command.ExecuteReader()

   while($reader.Read()) {
        $props = @{}
        for($i = 0; $i -lt $reader.FieldCount; $i+=1) {
            $name = $reader.GetName($i)
            $value = $reader.item($i)
            $props.Add($name, $value)   
        }
        $obj = new-object PSObject -Property $props
        Write-Output $obj
   }

   $reader.Dispose()
   $command.Dispose()
}
然后您可以这样做,将内容写入列:

$sql = "select * from legacydb.ebt_invoice_dtl where premnum = 397743"
Get-OracleDbObject -Query $sql -Connection $conn | Format-Table *

谢谢!-这些代码对我来说有点超前(我将对此进行更多研究),但我使用我的表结构使代码正常工作。但我忘了问-我如何动态输出列名?因为我需要获取许多表的所有列,当我查询时,我不知道列名,并且再次需要大量键入。我可以为这部分代码构建变量吗?“格式化表格dtl\U id、发票\U id、债务人、许可证、发票\U num等。”很抱歉,我应该以更明确的方式提出这个问题。再次感谢。@ikask您可以使用
格式化表格*
打印对象的所有属性。在这种情况下,只需
格式化表格
(无参数)由于没有显示这些自定义对象的默认方式,因此可能也可以使用。我将此添加到了答案中,并进行了一些清理,希望现在使用起来更方便。感谢mike z。Format table*完成了此工作。我将尝试修订并了解这两个代码。
$sql = "select * from legacydb.ebt_invoice_dtl where premnum = 397743"
Get-OracleDbObject -Query $sql -Connection $conn | Format-Table *