Question

Je suis ce paramètre:

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

Lorsque la chaîne $objUser.Telephone peut être vide. Si elle est vide, comment puis-je convertir en [DBNull]::Value?

J'ai essayé:

if ([string]:IsNullOrEmpty($objUser.Telephone)) { $objUser.Telephone = [DBNull]::Value };

Mais cela me donne l'erreur:

  

Exception appelant "ExecuteNonQuery" par "0" argument (s): "Impossible de convertir la valeur de paramètre à partir d'un ResultPropertyValueCollection à une chaîne"

Et si je le convertir en une chaîne, il insère une "" chaîne vide, et non DBNull.

Comment cela peut-il se faire?

Merci.

Était-ce utile?

La solution

Dans PowerShell, vous pouvez traiter les chaînes null / vide comme une valeur booléenne.

$x = $null
if ($x) { 'this wont print' }

$x = ""
if ($x) { 'this wont print' }

$x = "blah"
if ($x) { 'this will' }

Alors .... avoir dit que vous pouvez faire:

$Parameter.Value = $(if ($x) { $x } else { [DBNull]::Value })

Mais je préférerais envelopper dans cette fonction comme:

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

Autres conseils

Je ne sais pas Powershell, mais en C # je ferais quelque chose comme ceci:

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

Toujours ajouter + "" à la fin des valeurs db ...

$ Command.Parameters [ "@ EmployeType"]. Valeur = $ ADResult.EmployeeType + ""

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top