使用 .NET 4 和 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 是上面可接受的参数,但将 SelectParameters 添加到 SqlDataSource 时可接受的 NULL 值只是“null”。
最佳答案
添加参数时应该有一个选项,可以将空字符串转换为null。
<SelectParameters>
<asp:ControlParameter ControlID="lstCategories" Name="ProductSubcategoryID" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
</SelectParameters>
由于您使用的是存储过程,因此您需要将参数设为可选:
@SomeParm INT = NULL
关于c# - 如何将空值传递给使用存储过程的 SqlDataSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8010681/