在Null中输入时在数据库字段中设置日期值

时间:2014-02-05 03:29:41

标签: c# database datetime

我在为数据库字段设置参数时尝试设置条件,这样如果接收值为null,则应将其设置为当前日期

cmd.Parameters.AddWithValue("@DatePlannedEnd", SqlDbType.NVarChar).Value = pm.DatePlannedEnd != null ? pm.DatePlannedEnd : DateTime.Now.Date;

我收到错误:

  

无法确定条件表达式的类型,因为字符串和System.Date.Time之间没有隐式转换

DatePlannedEnd是数据库中的Date字段。知道什么是实现我想做的正确方法?

3 个答案:

答案 0 :(得分:0)

您正在混合Add和AddWithValue。 AddWithValue的重点是您提供参数的值,而不是类型。从值中推断出类型。如果要显式设置Value属性,则调用Add,而不是AddWithValue。

除此之外,为什么要将类型指定为NVarChar,然后将DateTime指定为值?如果数据库中的数据类型是date,那么SqlDbType应该是Date,而不是NVarChar。如果你使用AddWithValue,那将被推断。

答案 1 :(得分:0)

你不能从三元表达式中返回两种不同的类型。

您要将DateTime.Now添加为日期,但您的参数类型是字符串。首先将其转换为字符串。

另外,使用一种方法或另一种方法来添加参数,而不是两者的组合。

var datePlannedEnd = pm.DatePlannedEnd ?? DateTime.Now.Date.ToString();

cmd.Parameters.Add("@DatePlannedEnd", SqlDbType.NVarChar);
cmd.Parameters["@DatePlannedEnd"].Value = datePlannedEnd;

或者:

cmd.Parameters.AddWithValue("@DatePlannedEnd", datePlannedEnd);

如果您对数据库有任何控制权,请考虑将该列类型更改为日期而不是字符串。这样,只要从数据库中取回值,就不必将字符串解析回有效的DateTime。

答案 2 :(得分:0)

您可以在提交数据库之前先尝试检查值:)

if (pm.DatePlannedEnd == null) {
pm.DatePlannedEnd = DateTime.Now.Date.ToString();
}