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

标签 c# asp.net stored-procedures

使用 .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/

相关文章:

使用 IE8 显示隐藏时出现 ASP.Net JScript 错误

azure - 宇宙数据库 : Dynamic Input and Output in Stored Procedure

sql - IF THEN 在存储过程中循环

c# - 通过 HTTP 代理的双向通信

c# - 如何使用 Entity Framework Code First 映射非公共(public) Collection 属性?

c# - 针对游戏的替代 Java 或 C# UI 库

asp.net - 无法为 Azure 云服务设置通配符 SSL

c# - 如何将 ReadOnlyCollection<T> 转换为 T[]?

c# - 可以用 jquery 开发整个 asp.net web 表单

Sql select语句查找某个时间段内重复预订