C# 如何将空值传递给使用存储过程的SqlDataSource?
使用.NET4和C#。所有这些都会引发错误: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(
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