Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将空白字段值传递给存储过程ASP.NET C#_.net_Asp.net_Sql_Sql Server_Dbnull - Fatal编程技术网

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

将空白字段值传递给存储过程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到字符串的转换出现了错误 这是我问题的

如果文本框字段为空,我想将SQL Server 2008数据库表中的所有行返回到SQL数据源中。因此,我用
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;
}