我在为数据库字段设置参数时尝试设置条件,这样如果接收值为null,则应将其设置为当前日期
cmd.Parameters.AddWithValue("@DatePlannedEnd", SqlDbType.NVarChar).Value = pm.DatePlannedEnd != null ? pm.DatePlannedEnd : DateTime.Now.Date;
我收到错误:
无法确定条件表达式的类型,因为字符串和System.Date.Time之间没有隐式转换
DatePlannedEnd
是数据库中的Date字段。知道什么是实现我想做的正确方法?
答案 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();
}