You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell调用SqlDataAdapter.Fill遇重载歧义错误求助

解决PowerShell中SqlDataAdapter.Fill的重载歧义错误

你的错误根源在于对SqlDataAdapter的使用方式不对,导致调用Fill()方法时传了错误的参数类型,PowerShell找不到匹配的重载方法,所以抛出了歧义错误。我来帮你一步步修正代码并解释问题点:

问题分析

  1. SelectCommand赋值错误:你把$SQLQuery字符串直接赋值给了$sqlAdapter.SelectCommand,但这个属性需要的是SqlCommand对象,不是纯文本SQL语句
  2. Fill()参数错误:SqlDataAdapter.Fill()没有接受字符串的重载,你传了$SqlCmd.CommandText(字符串),应该传入你创建的$dataSet对象,它会把查询结果填充到这个DataSet中
  3. 还有两处小语法错误:$ReaderValidate是无意义的空行,Write-output = "$allResults"多了个等号

修正后的完整代码

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = $constring
$SqlConnection.AccessToken = $AccessToken
$SqlConnection.Open()

$SQLQuery = "SELECT DISTINCT servername, DBName FROM DBInfo "
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SQLQuery
$SqlCmd.Connection = $SqlConnection

# 正确配置SqlDataAdapter的SelectCommand
$sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$sqlAdapter.SelectCommand = $SqlCmd  # 这里赋值的是SqlCommand对象,不是字符串

$dataSet = New-Object System.Data.Dataset
# 调用Fill方法,传入DataSet对象,返回值是受影响的行数
$allResults = $sqlAdapter.Fill($dataSet)
Write-Output "查询到的行数: $allResults"

# 遍历结果集中的数据(示例)
foreach ($row in $dataSet.Tables[0].Rows) {
    $serverName = $row["servername"]
    $dbName = $row["DBName"]
    # 这里添加你对每个字段的处理逻辑
    Write-Output "处理服务器: $serverName 的数据库: $dbName"
}

# Close SQL Connection
$SqlConnection.Close();

关键说明

  • $sqlAdapter.Fill($dataSet)会把查询结果填充到$dataSet里,返回的$allResults是查询到的行数
  • 要处理每个字段,你需要遍历$dataSet.Tables[0].Rows(因为你的查询只返回一个结果集,所以取索引0的表),然后通过行对象的列名来获取对应的值
  • 你的托管标识AccessToken的使用是没问题的,不需要改动

内容的提问来源于stack exchange,提问作者user3622142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:32:54