将空白字段值传递给存储过程ASP.NET C#
如果文本框字段为空,我想将SQL Server 2008数据库表中的所有行返回到SQL数据源中。因此,我用将空白字段值传递给存储过程ASP.NET C#,.net,asp.net,sql,sql-server,dbnull,.net,Asp.net,Sql,Sql Server,Dbnull,如果文本框字段为空,我想将SQL Server 2008数据库表中的所有行返回到SQL数据源中。因此,我用if@date为NULL子句创建了一个存储过程 尽管存储过程在VisualStudio2008中似乎运行良好,但实际的网页没有显示任何结果 如果textBox.Text==string.Empty,我猜我必须向存储的进程发送一个DBNull值。我尝试了SqlDataSource1.SelectParameters.Add,但似乎从DBNull.Value到字符串的转换出现了错误 这是我问题的
if@date为NULL
子句创建了一个存储过程
尽管存储过程在VisualStudio2008中似乎运行良好,但实际的网页没有显示任何结果
如果textBox.Text==string.Empty
,我猜我必须向存储的进程发送一个DBNull
值。我尝试了SqlDataSource1.SelectParameters.Add
,但似乎从DBNull.Value
到字符串的转换出现了错误
这是我问题的根源还是我遗漏了什么?如果文本字段为空,我如何将
DBNull.Value
传递给存储过程?您可以在存储过程中将默认值设置为null,以便在文本框为空的情况下,您不必传递任何内容,要执行此操作,只需在存储过程参数列表中的参数类型后写入=NULL。您需要确保在SqlDataSource上CancelSelectOnNullParameter设置为false,并且在所需参数上ConvertEmptyStringToFull为true。在标记中,它应该是这样的:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" SelectCommand="...">
<SelectParameters>
<asp:ControlParameter Name="..." ControlID="..." PropertyName="..." DbType="..." ConvertEmptyStringToNull="true"/>
...
</SelectParameters>
</asp:SqlDataSource>
这应该可以让你解决你的问题。你的意思是@date=NULL-不起作用。还尝试将ASP ControlParameter属性窗口中的DefaultValue设置为DBNull。值仍然为空谢谢我完全错过了CancelSelectOnNullParameter。仅因为参数为null而默认取消调用看起来像是胡说八道。我花了半天时间试图弄清楚为什么没有调用我的存储过程
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
if (String.IsNullOrEmpty(textBox.Text))
((IDbDataParameter)e.Command.Parameters["@name"]).Value = DBNull.Value;
}