如果文本框字段为空,我希望将 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/