【问题标题】:Passing objects to PowerShell functions将对象传递给 PowerShell 函数
【发布时间】:2016-03-30 21:47:28
【问题描述】:

我正在尝试将 SQL 适配器对象传递给 PowerShell 函数,但出现此错误:

executeQueryAndFillTable : 无法处理参数转换 参数'da'。无法转换类型的“System.Object[]”值 “System.Object[]”键入“System.Data.SqlClient.SqlDataAdapter”。

这是代码

function sql_pull
{
    # define Objects
    $xmlDoc = New-Object System.Xml.XmlDocument
    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand
    $sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $connectionString = "Password=$password;Persist Security Info=True;User ID=$userId;Data Source=$dataSource"
    $counter = 0

    # database queries 
    $queries = @(
    "Select * from sys.configurations for xml Raw ('Cretiria'), type, ROOT('sys.configurations'), ELEMENTS");

    $sqlConnection.ConnectionString = $connectionString
    $sqlCommand.Connection = $sqlConnection

    try {
        $sqlConnection.Open()
        
        foreach($q in $queries) 
        {
            $sqlCommand.CommandText = $q
            $sqlAdapter.SelectCommand = $sqlCommand.CommandText
            $sqlAdapter.SelectCommand.CommandTimeout = 300

            $res = executeQueryAndFillTable($sqlAdapter, $sqlCommand)              
        }

        $sqlConnection.Dispose()
        $sqlCommand.Dispose()
        $sqlAdapter.Dispose()
    } 
    catch
    {
        Throw
    }    
}

function executeQueryAndFillTable
{
    param(
        [System.Data.SqlClient.SqlDataAdapter]$da,
        [System.Data.SqlClient.SqlCommand] $command
    )

    $dataTable = New-Object System.Data.DataTable
    $da.SelectCommand = $command
    $da.Fill($dataTable)
    #check
    $data = $dataTable.Rows[0][0]
    return $data
}

【问题讨论】:

  • $da = 新对象 System.Data.SqlClient.SqlDataAdapter ?
  • @JaquelineVanek 问题是如何调用函数。因此被骗了
  • 请举例说明您在此处使用的完整命令/管道。仅显示功能不足以让我们查明问题。
  • @FoxDeploy 问题就在这里:executeQueryAndFillTable($sqlAdapter, $sqlCommand)

标签: c# powershell powershell-2.0


【解决方案1】:

两件事:

首先:在PowerShell函数中使用前应声明。

第二:函数的调用方式。

executeQueryAndFillTable($sqlAdapter, $sqlCommand)

这不是在 PowerShell 中调用函数的正确方法。如果您以这种方式调用它,PowerShell 认为您调用的函数只有一个参数,该参数是两个不同类型元素的数组(非常重要的 , 是 PowerShell 中的数组运算符)(错误中 System.Object[] 的原因)。

正确的做法是:

executeQueryAndFillTable $sqlAdapter $sqlCommand

【讨论】:

  • tnx!这很有帮助!
  • @C.E 也许你可以把这个问题作为回答?
  • @CE,请将此标记为“答案”,这样它就不会一直出现在未回答的 SOF 问题下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2020-07-18
  • 2015-08-30
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多