2011-11-04 167 views
2

使用.NET 4和C#。所有這些拋出一個錯誤:如何將空值傳遞給使用存儲過程的SqlDataSource?

sdsTypeinfo.SelectParameters.Add("@TypeCode", DbType.Boolean, DBNull.Value); 

sdsTypeinfo.SelectParameters.Add("@TypeCode", DBNull.Value); 

sdsTypeinfo.SelectParameters.Add("@TypeCode", null); 

sdsTypeinfo.SelectParameters.Add("@TypeCode", ""); 

該錯誤表明過程沒有得到任何值。

Procedure or function 'Typeinfo' expects parameter '@TypeCode', which was not supplied. 

回答

你不需要在參數的名稱@。這比添加參數使用一個SqlCommand調用存儲過程時不同,在這種情況下要這樣的事:

cmd.Parameters.AddWithValue("@TypeCode", DBNull.Value); 

此外,DBNull.value在上述可接受的參數,但接受了NULL值時將SelectParameters添加到SqlDataSource只是簡單地爲「null」。

+1

它拋出什麼樣的錯誤?在Sql服務器端或客戶端?什麼是錯誤信息? – Icarus

+4

這是一個錯字嗎?該錯誤期望該參數被稱爲'@ pTypeCode',並且您傳入'@TypeCode' ... –

回答

0

你可以嘗試這樣的...

string x = null; 
command.Parameters.AddParameter(
    new SqlParameter("@column", (object)x ?? DBNull.Value); 

會給你DBNull.Value的值的PARM,但

string x = "A String"; 
command.Parameters.AddParameter(
    new SqlParameter("@column", (object)x ?? DBNull.Value); 
0

在您的存儲過程中設置的參數有值例如

@TypeCode = '' 

,或者如果它的一個int

@typecode = 1 

等你得到的想法。

+0

我無法控制存儲過程。 – mmcglynn

1

添加參數將空字符串轉換爲空時應該有一個選項。

<SelectParameters> 
    <asp:ControlParameter ControlID="lstCategories" Name="ProductSubcategoryID" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" /> 
</SelectParameters> 

由於您使用存儲過程,你會想使參數可選:

@SomeParm INT = NULL 
相關問題