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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top