Powershell und SQL-Parameter. Wenn leere Zeichenkette, übergeben DBNull
-
06-09-2019 - |
Frage
Ich habe diesen Parameter:
$objDbCmd.Parameters.Add("@telephone", [System.Data.SqlDbType]::VarChar, 18) | Out-Null;
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
Wenn die Zeichenfolge $objUser.Telephone
kann leer sein. Wenn es leer ist, wie kann ich wandeln es in [DBNull]::Value
?
Ich habe versucht:
if ([string]:IsNullOrEmpty($objUser.Telephone)) { $objUser.Telephone = [DBNull]::Value };
Aber das gibt mir den Fehler:
Exception "ExecuteNonQuery" mit "0" Argumente des Rufnummer (n):. "Fehler beim Parameterwert von einem ResultPropertyValueCollection in einen String konvertieren"
Und wenn ich es in eine Zeichenfolge konvertieren, sie fügt einen leeren String ""
und nicht DBNull
.
Wie kann dies erreicht werden?
Danke.
Lösung
In Powershell können Sie null / leere Strings als boolean behandeln.
$x = $null
if ($x) { 'this wont print' }
$x = ""
if ($x) { 'this wont print' }
$x = "blah"
if ($x) { 'this will' }
So .... gesagt haben, dass Sie tun können:
$Parameter.Value = $(if ($x) { $x } else { [DBNull]::Value })
Aber ich würde viel lieber diese einpacken in einer Funktion wie:
function CatchNull([String]$x) {
if ($x) { $x } else { [DBNull]::Value }
}
Andere Tipps
Ich weiß nicht, über Powershell, aber in C # würde ich so etwas tun:
if ([string]::IsNullOrEmpty($objUser.Telephone))
{
$objDbCmd.Parameters["@telephone"].Value = [DBNull]::Value;
}
else
{
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
}
Immer anhängen + "" am Ende der db-Werte ...
$ Command.Parameters [ "@ EmployeeType"]. Value = $ ADResult.EmployeeType + ""