paramètres et Powershell SQL. Si une chaîne vide, passez DBNull
-
06-09-2019 - |
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.
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 + ""