C# 如何将空值传递给使用存储过程的SqlDataSource?

C# 如何将空值传递给使用存储过程的SqlDataSource?,c#,asp.net,stored-procedures,C#,Asp.net,Stored Procedures,使用.NET4和C#。所有这些都会引发错误: sdsTypeinfo.SelectParameters.Add("@TypeCode", DbType.Boolean, DBNull.Value); sdsTypeinfo.SelectParameters.Add("@TypeCode", DBNull.Value); sdsTypeinfo.SelectParameters.Add("@TypeCode", null); sdsTypeinfo.SelectParameters.Add(

使用.NET4和C#。所有这些都会引发错误:

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在上面是一个可接受的参数,但是在向SqlDataSource添加SelectParameters时,可接受的NULL值只是“NULL”。

您可以这样尝试

    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);

在存储过程中,将参数设置为具有以下值:

@TypeCode = '' 
或者如果它是一个int

@typecode = 1

等你明白了。

在添加参数将空字符串转换为空字符串时,应该有一个选项

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

它会抛出什么样的错误?在Sql server端还是客户端?错误信息到底是什么?是打字错误吗?错误要求调用参数
@pTypeCode
,而您正在传入
@TypeCode
…我无法控制存储过程。
@SomeParm INT = NULL