我有一些使用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
关于如何停止回声的任何想法?
您所看到的是函数的返回值。例如,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
我更喜欢第一种方法,因为您可能会遇到想要利用返回值的情况。但是,第二种方法更清楚地表明您的意图是您对返回值不感兴趣。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句