2009-05-28 22 views
6

Tôi có tham số này:Tham số Powershell và SQL. Nếu chuỗi rỗng, vượt qua DBNull

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

Trường hợp chuỗi $objUser.Telephone thể để trống. Nếu nó trống, làm thế nào tôi có thể chuyển đổi nó thành [DBNull]::Value?

tôi đã cố gắng:

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

Nhưng điều đó mang lại cho tôi những lỗi:

Exception calling "ExecuteNonQuery" with "0" argument(s): "Failed to convert parameter value from a ResultPropertyValueCollection to a String."

Và nếu tôi chuyển đổi nó thành một chuỗi, nó chèn một chuỗi rỗng "", và không DBNull.

Làm cách nào để thực hiện điều này?

Cảm ơn.

Trả lời

15

Trong PowerShell, bạn có thể điều trị null/chuỗi rỗng như một boolean.

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

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

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

Vì vậy .... có nói rằng bạn có thể làm:

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

Nhưng tôi đã có nhiều thay quấn này trong một chức năng như:

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

Rất thú vị. Cảm ơn Josh. Tôi sẽ kiểm tra điều này sau ngày hôm nay và sau đó tôi sẽ cho bạn biết nếu nó giải quyết được vấn đề của tôi. –

6

Tôi không biết về PowerShell, nhưng trong C# tôi sẽ làm một cái gì đó như thế này:

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

Điều đó hoạt động trong PowerShell (với một tinh chỉnh nhỏ - được chỉnh sửa để gọi thành viên tĩnh bằng cú pháp PowerShell). Đó là những gì tôi đã làm trong một số kịch bản và nó hoạt động đúng. –

+0

Đó sẽ là một giải pháp có. Nhưng tôi đã hy vọng cho một giải pháp "đơn giản" mà không đòi hỏi nhiều mã. Giống như một hàm chuyển đổi một chuỗi rỗng thành DBNull. Tôi có 60 thông số ... –

1

Luôn gắn + "" ở cuối giá trị db ...

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

Các vấn đề liên quan