PowerShell e SQL parametri. Se la stringa vuota, passare DBNull
-
06-09-2019 - |
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.
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 + ""