我有一个存储过程参数:
@ScmDate DateTime = NULL
当我按照下面的参数传递C#时,它会出错:将nvarchar转换为datetime时出错。
if (txtWaitedDate.Text != "")
cmdTwMainEntry.Parameters.AddWithValue("@scmDate", Convert.ToDateTime(txtWaitedDate.Text));
即使我已将此参数的默认值设为NULL,但是当未满足上述C#条件时,也会出错。
编辑:
只有当我将TextBox留空时才会出错。
答案 0 :(得分:2)
只需确保在文本框为空时发送DbNull.Value。 那应该是诀窍,afaik。
答案 1 :(得分:1)
我怀疑你的日期格式不是sql server所期望的,尝试使用DateTime.TryParse和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;
答案 2 :(得分:0)
我认为你填写了错误的日期(格式)。所以这个值无法转换。
答案 3 :(得分:0)
if( DateTime.TryParse( txtWaitedDate.Text, out WaitedDate )
Entry.Parameters.AddWithValue("@scmDate", WaitedDate );
else
Entry.Parameters.AddWithValue("@scmDate", DBNull.Value );
答案 4 :(得分:0)
在SQL执行C#之前放置一个断点并检查您的Parameters集合。听起来@ScmDate正在偷偷摸摸一个像String.Empty这样的值。
答案 5 :(得分:0)
如果为参数指定了默认值,则在调用存储过程时无需为该参数提供值。例如,如果你有:
@ScmDate DateTime = NULL
当没有可用于此参数的值时,简单的解决方案就是忽略此参数。