如何将空值传递给使用存储过程的SqlDataSource?
问题描述:
使用.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”。
答
你可以尝试这样的...
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);
答
添加参数将空字符串转换为空时应该有一个选项。
<SelectParameters>
<asp:ControlParameter ControlID="lstCategories" Name="ProductSubcategoryID" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
</SelectParameters>
由于您使用存储过程,你会想使参数可选:
@SomeParm INT = NULL
它抛出什么样的错误?在Sql服务器端或客户端?什么是错误信息? – Icarus
这是一个错字吗?该错误期望该参数被称为'@ pTypeCode',并且您传入'@TypeCode' ... –