2011-11-04 137 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 
相关问题