.net - 将空白字段值传递给存储过程 ASP .NET C#

标签 .net asp.net sql sql-server dbnull

如果文本框字段为空,我希望将 SQL Server 2008 数据库表中的所有行返回到 SQL 数据源中。因此,我创建了一个带有 if @date IS NULL 子句的存储过程。

尽管存储过程在 Visual Studio 2008 中似乎工作正常,但实际网页不显示任何结果。

我猜如果textBox.Text == string.Empty,我必须向存储过程发送一个DBNull值。我尝试了 SqlDataSource1.SelectParameters.Add 但似乎出现了从 DBNull.Value 到字符串的转换错误。

这是我的问题的根源还是我错过了其他东西?如果文本字段为空,如何将 DBNull.Value 传递给存储过程?

最佳答案

您需要确保 SqlDataSource 上的 CancelSelectOnNullParameter 设置为 false,并且所需参数上的 ConvertEmptyStringToNull 设置为 true。它在标记中应该看起来像这样:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" SelectCommand="...">
  <SelectParameters>
    <asp:ControlParameter Name="..." ControlID="..." PropertyName="..." DbType="..." ConvertEmptyStringToNull="true"/>
    ...
  </SelectParameters>
</asp:SqlDataSource>

如果您有多个可以提供空值的控件,并且您只想允许其中一个为空,则会出现问题。在这种情况下,您必须将 CancelSelectOnNullParameter 设置为 true 并使用 Selecting 事件添加 DBNull.Value:

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
  if (String.IsNullOrEmpty(textBox.Text))
    ((IDbDataParameter)e.Command.Parameters["@name"]).Value = DBNull.Value;
}

这应该可以让你解决你的问题。

关于.net - 将空白字段值传递给存储过程 ASP .NET C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068052/

相关文章:

c# - 在 GDI+ 中沿其笔划宽度绘制具有线性渐变的多段线

c# - NGEN x86 与 x64 与 .NET 可执行文件

.net - 使用 Enterprise Library 登录到滚动 CSV 文件

c# - 仅适用于 lambda 表达式的隐式类型推断?为什么 ?使困惑 !

c# - 在属性中实现逻辑是一种好习惯吗

php - 如何检查包含字符串的列?

c# - javascript根据另一个下拉列表自动选择下拉列表

asp.net - 人们如何称呼 aspx 文件以将其与 aspx.cs/aspx.vb 代码隐藏文件区分开来?

sql - 用户定义的函数 - 它们是糟糕的编码实践吗?

Mysql 按多列选择顺序