Domanda

ho ottenuto questo parametro:

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

Se il $objUser.Telephone stringa può essere vuota. Se è vuota, come posso convertirlo in [DBNull]::Value?

ho provato:

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

Ma che mi dà l'errore:

  

Eccezione chiamando "ExecuteNonQuery" con "0" argomento (s): "Impossibile convertire il valore del parametro da un ResultPropertyValueCollection a una stringa"

E se posso convertire in una stringa, inserisce un "" stringa vuota, e non DBNull.

Come può essere realizzato?

Grazie.

È stato utile?

Soluzione

In PowerShell, è possibile trattare null / stringhe vuote come un valore booleano.

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

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

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

Quindi .... dopo aver detto che si può fare:

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

Ma mi piacerebbe molto meglio avvolgere questo in una funzione del tipo:

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

Altri suggerimenti

Non so su PowerShell, ma in C # vorrei fare qualcosa di simile a questo:

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

aggiungere sempre + "" alla fine dei valori db ...

$ command.Parameters [ "@ EmployeeType"]. Valore = $ ADResult.EmployeeType + ""

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top