PowerShell 및 SQL 매개 변수. 비어있는 문자열이 있으면 dbnull을 통과하십시오
-
06-09-2019 - |
문제
이 매개 변수를 얻었습니다.
$objDbCmd.Parameters.Add("@telephone", [System.Data.SqlDbType]::VarChar, 18) | Out-Null;
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
문자열 $objUser.Telephone
비어있을 수 있습니다. 비어 있으면 어떻게 변환 할 수 있습니까? [DBNull]::Value
?
나는 시도했다 :
if ([string]:IsNullOrEmpty($objUser.Telephone)) { $objUser.Telephone = [DBNull]::Value };
그러나 그것은 나에게 오류를 준다 :
"0"인수와 함께 "ExecuteNquery"를 호출하는 예외 : "매개 변수 값을 resultPropertyValueCollection에서 문자열로 변환하지 못했습니다."
문자열로 변환하면 빈 문자열을 삽입합니다. ""
, 그렇지 않습니다 DBNull
.
이것이 어떻게 달성 될 수 있습니까?
감사.
해결책
PowerShell에서는 Null/Empty 현을 부울로 취급 할 수 있습니다.
$x = $null
if ($x) { 'this wont print' }
$x = ""
if ($x) { 'this wont print' }
$x = "blah"
if ($x) { 'this will' }
그래서 .... 당신이 할 수 있다고 말했습니다.
$Parameter.Value = $(if ($x) { $x } else { [DBNull]::Value })
그러나 나는 다음과 같은 기능으로 이것을 많이 마무리합니다.
function CatchNull([String]$x) {
if ($x) { $x } else { [DBNull]::Value }
}
다른 팁
나는 PowerShell에 대해 잘 모르겠지만 C#에서는 다음과 같은 일을 할 것입니다.
if ([string]::IsNullOrEmpty($objUser.Telephone))
{
$objDbCmd.Parameters["@telephone"].Value = [DBNull]::Value;
}
else
{
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
}
DB 값의 끝에서 항상 +""를 부여하십시오 ...
$ command.parameters [ "@Employeetype"]. value = $ adresult.employeetype + ""
제휴하지 않습니다 StackOverflow