我有一些函数使用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
关于如何阻止回声的任何想法?
答案 0 :(得分:5)
您看到的是函数的返回值。例如,SqlParameterCollection.AddWithValue()
返回 SqlParameter ,SqlCommand.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
我更喜欢第一种方法,因为您可能会遇到想要使用返回值的情况。但是,第二种方法更清楚地表明了您对返回值不感兴趣的意图。