PowerShell 및 SQL 매개 변수. 비어있는 문자열이 있으면 dbnull을 통과하십시오

StackOverflow https://stackoverflow.com/questions/920991

  •  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 + ""

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top