PowerShell e SQL parâmetros. Se cadeia vazia, passar DBNull
-
06-09-2019 - |
Pergunta
Eu tenho este parâmetro:
$objDbCmd.Parameters.Add("@telephone", [System.Data.SqlDbType]::VarChar, 18) | Out-Null;
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
Quando o $objUser.Telephone
corda pode estar vazio. Se ele está vazio, como posso convertê-lo para [DBNull]::Value
?
Eu tentei:
if ([string]:IsNullOrEmpty($objUser.Telephone)) { $objUser.Telephone = [DBNull]::Value };
Mas isso me dá o erro:
Exceção chamando "ExecuteNonQuery" com "0" argumento (s): "Falha ao valor do parâmetro convertido a partir de um ResultPropertyValueCollection a uma String"
E se eu convertê-lo em uma corda, ele insere um ""
cadeia vazia, e não DBNull
.
Como isso pode ser feito?
Graças.
Solução
Em PowerShell, você pode tratar nulos / cadeias vazias como um boolean.
$x = $null
if ($x) { 'this wont print' }
$x = ""
if ($x) { 'this wont print' }
$x = "blah"
if ($x) { 'this will' }
Então .... tendo dito que você pode fazer:
$Parameter.Value = $(if ($x) { $x } else { [DBNull]::Value })
Mas eu prefiro acabar com isto em uma função como:
function CatchNull([String]$x) {
if ($x) { $x } else { [DBNull]::Value }
}
Outras dicas
Eu não sei sobre PowerShell, mas em C # eu faria algo assim:
if ([string]::IsNullOrEmpty($objUser.Telephone))
{
$objDbCmd.Parameters["@telephone"].Value = [DBNull]::Value;
}
else
{
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
}
Sempre anexar + "" no final de valores db ...
$ command.Parameters [ "@ EmployeeType"]. Value = $ ADResult.EmployeeType + ""