2009-05-28 19 views
6

私はこのパラメータを持っています:PowershellとSQLパラメータ。空の文字列の場合は、DBNull

$objDbCmd.Parameters.Add("@telephone", [System.Data.SqlDbType]::VarChar, 18) | Out-Null; 
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone; 

ここで、文字列$objUser.Telephoneは空であってもかまいません。それが空の場合、どうすれば[DBNull]::Valueに変換できますか?私はそれを文字列に変換すると、""ではなく空の文字列""を挿入します。

これはどのように達成できますか?

ありがとう。

答えて

15

PowerShellでは、あなたはブール値としてnull /空文字列を扱うことができます。 +常に

function CatchNull([String]$x) { 
    if ($x) { $x } else { [DBNull]::Value } 
} 
+0

非常に興味深い。ありがとうジョシュ。私は今日後でこれをテストして、問題が解決したかどうかを知らせます。 –

6

私はPowerShellの知らないが、C#で、私はこのような何かをするだろう:

if ([string]::IsNullOrEmpty($objUser.Telephone)) 
{ 
$objDbCmd.Parameters["@telephone"].Value = [DBNull]::Value; 
} 
else 
{ 
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone; 
} 
+0

これはPowerShellで機能します(PowerShell構文を使用して静的メンバーを呼び出すために1つのマイナーな調整が行われています)。それは私がいくつかのスクリプトで行ったことであり、正しく動作します。 –

+0

これは解決策になります。しかし、私はそれほど多くのコードを必要としない "より単純な"ソリューションを期待していました。空の文字列をDBNullに変換する関数のように。私は60のパラメータのようになった... –

1

追加:

$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 }) 

しかし、私はむしろのような機能で、これを包むのです"" db値の最後に...

$ command.Parameters ["@ EmployeeType"]。値= $ ADResult.EmployeeType + ""

関連する問題