gpt4 book ai didi

powershell - SqlClient.ExecuteNonQuery 不返回行数

转载 作者:行者123 更新时间:2023-12-02 22:31:31 29 4
gpt4 key购买 nike

我已经处理这个问题一段时间了。我有一个简单的 PowerShell 函数,它接受一个到 SQL Server 的开放连接和一个包含 SQL 命令的字符串,并针对服务器运行它。该函数应返回一个整数值,表示已更新的行数。但是,它正在输出有关该方法的信息。

代码:

function Invoke-MSSQLNonQuery () {
param (
[System.Data.SqlClient.SqlConnection]$Connection,
[string]$Command
)

# Create the SQL Command Ojbect
$SQLCommand = New-Object System.Data.SqlClient.SqlCommand

# Set the Command Text and Connection for the Command
$SQLCommand.CommandText=$Command
$SQLCommand.Connection=$Connection

# Run command and return the rows affected
[int]($SQLCommand.ExecuteNonQuery | Out-String)
}

但是,在执行时,出现以下错误:

Cannot convert value "
OverloadDefinitions
-------------------
int ExecuteNonQuery()
int IDbCommand.ExecuteNonQuery()

" to type "System.Int32". Error: "Input string was not in a correct format."
At C:\_Local\playground\Mason\UpdateFromInventory.ps1:153 char:5
+ [int]($SQLCommand.ExecuteNonQuery | Out-String)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger

我知道 ExecuteNonQuery 在通过管道传输到 Out-String 时会输出一个包含重载定义的表:

OverloadDefinitions
-------------------
int ExecuteNonQuery()
int IDbCommand.ExecuteNonQuery()

我也尝试过不将其通过管道传递给任何东西,这在没有表头的情况下返回了类似的结果。

编辑:另外,我应该提到我 95% 确定 SQL 命令正在成功执行。我确信这个函数以前工作过一次,甚至返回了正确的输出。然而,很长一段时间以来情况并非如此。

我的问题是:

  1. 为什么?
  2. 如何让它输出受影响的行数?

最佳答案

您正在尝试调用不带括号的方法。执行此操作时,该语句将显示重载列表(例如 here ),而不是实际调用该方法,即使您先将其转换为字符串,也无法将其转换为整数。

改变

[int]($SQLCommand.ExecuteNonQuery | Out-String)

进入

[int]$SQLCommand.ExecuteNonQuery()

代码应该做你想做的事。

关于powershell - SqlClient.ExecuteNonQuery 不返回行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51163344/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com