使用PowerShell调用SqlDataAdapter.Fill遇重载歧义错误求助
解决PowerShell中SqlDataAdapter.Fill的重载歧义错误
你的错误根源在于对SqlDataAdapter的使用方式不对,导致调用Fill()方法时传了错误的参数类型,PowerShell找不到匹配的重载方法,所以抛出了歧义错误。我来帮你一步步修正代码并解释问题点:
问题分析
SelectCommand赋值错误:你把$SQLQuery字符串直接赋值给了$sqlAdapter.SelectCommand,但这个属性需要的是SqlCommand对象,不是纯文本SQL语句Fill()参数错误:SqlDataAdapter.Fill()没有接受字符串的重载,你传了$SqlCmd.CommandText(字符串),应该传入你创建的$dataSet对象,它会把查询结果填充到这个DataSet中- 还有两处小语法错误:
$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
相关产品推荐
相关产品推荐

