向存储过程DateTime参数发送空值时出错

本文关键字:空值 出错 存储过程 DateTime 参数 | 更新日期: 2023-09-27 18:13:18

我有一个存储过程参数:

@ScmDate DateTime = NULL

在c#中,当我像下面这样传递参数时,它会给出错误:将nvarchar转换为datetime错误。

if (txtWaitedDate.Text != "")
    cmdTwMainEntry.Parameters.AddWithValue("@scmDate", Convert.ToDateTime(txtWaitedDate.Text));

尽管我已经给这个参数的默认值为NULL,但是当上面的c#条件不满足时,它会给出错误。

编辑:

我得到错误只有当我离开TextBox空

向存储过程DateTime参数发送空值时出错

确保发送DbNull。文本框为空时的值。我想这应该没问题。

我怀疑你的日期格式不是sql server所期望的,试着用DateTime转换它。为您的SQL Server实例尝试解析和正确的格式提供程序。

当一个使用mm/dd/yyyy格式而另一个使用dd/mm/yyyy格式时,可能会发生此错误。

编辑

手动更改参数类型应该可以工作。试试下面的代码,应该可以工作了:

    SqlParameter parameter = cmdTwMainEntry.Parameters.Add("@scmDate", System.Data.SqlDbType.DateTime);
        // Set the value.
        parameter.Value = (!string.IsNullOrEmpty(txtWaitedDate.Text)) ? Convert.ToDateTime(txtWaitedDate.Text) : System.DbNull.Value;

我想你填错了日期(格式)。所以这个值不能转换

在c#中执行SQL语句之前设置一个断点,并检查参数集合。听起来@ScmDate带着String.Empty.

这样的值偷偷溜了进来。

如果为参数指定了默认值,则在调用存储过程时不需要为该参数提供值。例如,如果你有:

@ScmDate DateTime = NULL

那么简单的解决方案就是忽略这个参数当这个参数没有可用的值

if( DateTime.TryParse( txtWaitedDate.Text, out WaitedDate )
    Entry.Parameters.AddWithValue("@scmDate", WaitedDate );
else
    Entry.Parameters.AddWithValue("@scmDate", DBNull.Value );