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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top