Параметры Powershell и SQL. Если пустая строка, передайте DBNull - PullRequest
6 голосов
/ 28 мая 2009

Я получил этот параметр:

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

Где строка $objUser.Telephone может быть пустой. Если он пуст, как я могу преобразовать его в [DBNull]::Value?

Я пытался:

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

Но это дает мне ошибку:

Исключение вызывает "ExecuteNonQuery" с аргументом (ами) "0": "Не удалось преобразовать значение параметра из ResultPropertyValueCollection в строку."

И если я преобразую его в строку, он вставит пустую строку "", а не DBNull.

Как это можно сделать?

Спасибо.

Ответы [ 3 ]

16 голосов
/ 29 мая 2009

В PowerShell вы можете рассматривать пустые / пустые строки как логическое значение.

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

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

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

Итак ... сказав, что вы можете сделать:

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

Но я бы предпочел обернуть это в такую ​​функцию, как:

function CatchNull([String]$x) {
   if ($x) { $x } else { [DBNull]::Value }
}
6 голосов
/ 28 мая 2009

Я не знаю о powershell, но в C # я бы сделал что-то вроде этого:

if ([string]::IsNullOrEmpty($objUser.Telephone))
{
 $objDbCmd.Parameters["@telephone"].Value = [DBNull]::Value;
}
else
{
 $objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
}
1 голос
/ 13 июля 2016

Всегда добавлять + "" в конце значений в дБ ...

$ command.Parameters ["@ EmployeeType"]. Значение = $ ADResult.EmployeeType + ""

...