【问题标题】:How to stop PowerShell SqlCommand from echoing parameters如何阻止 PowerShell SqlCommand 回显参数
【发布时间】:2016-07-17 12:38:51
【问题描述】:

我有一些函数使用 SqlCommand 对象来进行数据插入和查询。但是一个函数(文件中的最后一个)似乎将(大部分)属性回显到输出中。有问题的功能:

function Add-DataStudentChangeEvent($person,
        $key,
        $currentValue,
        $newValue,
        $eventType){

    $cmdEvent=New-Object System.Data.SqlClient.SqlCommand
    $cmdEvent.Connection = $conn
    $cmdEvent.CommandTimeout = 600000

    $cmdEvent.CommandText = "INSERT INTO ChangeEvent
            (AttributeKey
            ,CurrentAttributeValue
            ,NewAttributeValue
            ,EventType
            ,EventDate
            ,CompletedStatus
            ,Person_Id)
        VALUES
            (@AttributeKey,
            @CurrentAttributeValue,
            @NewAttributeValue,
            @EventType,
            GETDATE(),
            0,
            @PersonId);" -F

    $cmdEvent.Parameters.AddWithValue("@AttributeKey", $key); 
    $cmdEvent.Parameters.AddWithValue("@CurrentAttributeValue", $current);
    $cmdEvent.Parameters.AddWithValue("@NewAttributeValue", $updateTo);
    $cmdEvent.Parameters.AddWithValue("@EventType", $eventType);
    $cmdEvent.Parameters.AddWithValue("@PersonId", $person);

    $cmdEvent.ExecuteNonQuery()
}

在另一个使用参数化查询的类似函数中,我发现在末尾添加 -F 会停止回显。我确实说了大部分参数。 5 个中只有 4 个实际显示。这是我得到的输出:

1
CompareInfo                     : None
XmlSchemaCollectionDatabase     : 
XmlSchemaCollectionOwningSchema : 
XmlSchemaCollectionName         : 
ForceColumnEncryption           : False
DbType                          : String
LocaleId                        : 0
ParameterName                   : @CurrentAttributeValue
Precision                       : 0
Scale                           : 0
SqlDbType                       : NVarChar
SqlValue                        : Null
UdtTypeName                     : 
TypeName                        : 
Value                           : 
Direction                       : Input
IsNullable                      : False
Offset                          : 0
Size                            : 0
SourceColumn                    : 
SourceColumnNullMapping         : False
SourceVersion                   : Current

CompareInfo                     : None
XmlSchemaCollectionDatabase     : 
XmlSchemaCollectionOwningSchema : 
XmlSchemaCollectionName         : 
ForceColumnEncryption           : False
DbType                          : String
LocaleId                        : 0
ParameterName                   : @NewAttributeValue
Precision                       : 0
Scale                           : 0
SqlDbType                       : NVarChar
SqlValue                        : 2007-11-15
UdtTypeName                     : 
TypeName                        : 
Value                           : 2007-11-15
Direction                       : Input
IsNullable                      : False
Offset                          : 0
Size                            : 10
SourceColumn                    : 
SourceColumnNullMapping         : False
SourceVersion                   : Current

CompareInfo                     : None
XmlSchemaCollectionDatabase     : 
XmlSchemaCollectionOwningSchema : 
XmlSchemaCollectionName         : 
ForceColumnEncryption           : False
DbType                          : Int32
LocaleId                        : 0
ParameterName                   : @EventType
Precision                       : 0
Scale                           : 0
SqlDbType                       : Int
SqlValue                        : 1
UdtTypeName                     : 
TypeName                        : 
Value                           : 1
Direction                       : Input
IsNullable                      : False
Offset                          : 0
Size                            : 0
SourceColumn                    : 
SourceColumnNullMapping         : False
SourceVersion                   : Current

CompareInfo                     : None
XmlSchemaCollectionDatabase     : 
XmlSchemaCollectionOwningSchema : 
XmlSchemaCollectionName         : 
ForceColumnEncryption           : False
DbType                          : Int32
LocaleId                        : 0
ParameterName                   : @PersonId
Precision                       : 0
Scale                           : 0
SqlDbType                       : Int
SqlValue                        : 72
UdtTypeName                     : 
TypeName                        : 
Value                           : 72
Direction                       : Input
IsNullable                      : False
Offset                          : 0
Size                            : 0
SourceColumn                    : 
SourceColumnNullMapping         : False
SourceVersion                   : Current

关于如何阻止回声的任何想法?

【问题讨论】:

    标签: powershell sqlcommand


    【解决方案1】:

    您看到的是函数的返回值。例如,SqlParameterCollection.AddWithValue() 返回一个 SqlParameterSqlCommand.ExecuteNonQuery() 返回一个 int。与 C# 不同,您未明确处理的任何值都将写入输出流。

    有两种方法来处理它。第一种方法是将返回值分配给一个变量:

    $param = $cmdEvent.Parameters.AddWithValue("@AttributeKey", $key)
    $param = $cmdEvent.Parameters.AddWithValue("@CurrentAttributeValue", $current)
    $param = $cmdEvent.Parameters.AddWithValue("@NewAttributeValue", $updateTo)
    $param = $cmdEvent.Parameters.AddWithValue("@EventType", $eventType)
    $param = $cmdEvent.Parameters.AddWithValue("@PersonId", $person)
    
    $numRows = $cmdEvent.ExecuteNonQuery()
    

    第二种方法是将输出通过管道传输到空流:

    $cmdEvent.Parameters.AddWithValue("@AttributeKey", $key) | Out-Null 
    $cmdEvent.Parameters.AddWithValue("@CurrentAttributeValue", $current) | Out-Null
    $cmdEvent.Parameters.AddWithValue("@NewAttributeValue", $updateTo) | Out-Null
    $cmdEvent.Parameters.AddWithValue("@EventType", $eventType) | Out-Null
    $cmdEvent.Parameters.AddWithValue("@PersonId", $person) | Out-Null
    
    $cmdEvent.ExecuteNonQuery() | Out-Null
    

    我更喜欢第一种方法,因为您可能会遇到想要使用返回值的情况。但是,第二种方法更清楚地表明了您对返回值不感兴趣的意图。

    【讨论】:

    • 那么为什么在几乎相同的非查询和查询中,我没有看到这被发送到输出?
    • 没有看到更多,很难说。它可能与它是文件中的最后一个这一事实有关。可以再发帖吗?
    • 我明天将在办公室通过重新排序文件中的函数来测试它,如果它为那个调用而停止,并开始为现在在底部的那个,我会想知道是什么坏了过去。
    • 第一个选项最终解决了问题。我的处理时间也缩短了 10 分钟。
    • 很高兴这个答案在这里,感谢您对两种处理方式的精彩解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2021-12-14
    • 1970-01-01
    • 2011-06-16
    • 2021-08-21
    • 2011-04-13
    • 2012-03-10
    相关资源
    最近更新 更多