gpt4 book ai didi

powershell - 向 SQLCommand 添加参数并在以后添加值

转载 作者:行者123 更新时间:2023-12-02 03:03:20 24 4
gpt4 key购买 nike

我看过关于使用 Parameters.AddParameters.AddWithValue 的不同讨论(一个是明确的,另一个不是),但这不是我的问题。

我正在定义一个命令,它将用于对数据库进行多次插入。我想我会做类似下面的事情:

[define command]
[add parameters (including a batchid not known at this time)]

[enter loop]
[create new batchid]
[set parameter value]
[execute command]
[next]

这意味着我的参数是预先明确定义的,我在循环中设置它们的值。其代码如下所示:

$SqlCmdAdd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmdAdd.CommandType = [System.Data.CommandType]::StoredProcedure
$SqlCmdAdd.CommandText = "AddBatch"
$SqlCmdAdd.Parameters.Add("@RunId", [Data.SQLDBType]::UniqueIdentifier)
$SqlCmdAdd.Parameters.Add("@RunType", [Data.SQLDBType]::NVarChar, 50)
$SqlCmdAdd.Connection = $SqlConnection

在循环中我想我可以做这样的事情:

# Generate GUID to be used as a BatchID
$batchID = [guid]::NewGuid()

# I tried both using the parameter name, as well as their numeric order. Neither worked
$SqlCmdAdd.Parameters["@RunId"].Value = $batchID | Out-Null
$SqlCmdAdd.Parameters["@RunType"].Value = "HDD" | Out-Null
# $SqlCmdAdd.Parameters[0].SqlValue = $batchID | Out-Null
# $SqlCmdAdd.Parameters[1].SqlValue = "HDD" | Out-Null

但是,如果我读出 $SqlCmdAdd.Parameters[0] 和 [1] 的值,我会看到正确的名称和数据类型,但它们的值为空。因此,我会收到一个错误,指出没有为参数指定任何值。

起作用的是:

$SqlCmdAdd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmdAdd.CommandType = [System.Data.CommandType]::StoredProcedure
$SqlCmdAdd.CommandText = "AddBatch"
$SqlCmdAdd.Connection = $SqlConnection

在循环中这样做:

# Add parameters
$SqlCmdAdd.Parameters.AddWithValue("@RunId", $batchID) | Out-Null
$SqlCmdAdd.Parameters.AddWithValue("@RunType", "HDD") | Out-Null
$SqlCmdAdd.ExecuteNonQuery()
$SqlConnection.Close()

# Clear parameter collection for next run
$SqlCmdAdd.Parameters.Clear()

让我恼火的是需要为下一次运行清除参数集合,然后重新创建它们。虽然这会运行我的代码,但我很想知道为什么尝试在第一个代码块中设置先前创建的参数的值没有任何效果。

我尝试谷歌搜索并阅读了无数文章。

最佳答案

发生这种情况,因为在赋值之前将变量传送到 Out-Null。因此,

$SqlCmdAdd.Parameters["@RunId"].Value = $batchID | Out-Null

会先将$batchID传递给Out-Null,然后将结果-$null-赋值给.Value.

至于修复,只需像这样删除 Out-Null

$SqlCmdAdd.Parameters["@RunId"].Value = $batchID

关于powershell - 向 SQLCommand 添加参数并在以后添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59578788/

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