将参数值传递给asp.net中可选字符串的SQL存储过程

use*_*521 4 c# asp.net datetime stored-procedures .net-3.5

我有一个搜索页面,其中包含日期文本字段.用户可以填充或不填充此字段.但该字段是SQL存储过程的一个参数,它被调用以执行搜索查询.

当我浏览代码(并且Date字段为空)时,我收到一个错误,即该值无法转换为DateTime

如何将null值转换为DateTime,因为查询需要参数?

cmdSearch.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.DateTime));
cmdSearch.Parameters["@StartDate"].Value = Convert.ToDateTime(txtStartDate.Text.Trim());
Run Code Online (Sandbox Code Playgroud)

SWe*_*eko 5

如果将SQL proc中的参数设置为可选参数,则通过提供默认值

CREATE PROCEDURE MyProc
...
@StartDate datetime = null,
....
Run Code Online (Sandbox Code Playgroud)

他们你可以省略从c#代码发送该参数

DateTime result;
if (DateTime.TryParse(txtStartDate.Text, out result))
{
   cmdSearch.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.DateTime));
   cmdSearch.Parameters["@StartDate"].Value = result;
}
Run Code Online (Sandbox Code Playgroud)

如果解析文本字段不成功,则参数列表中不会添加该参数,并且数据库使用默认值.

此外,使用DateTime.TryParse(..)可以防止处理异常.