我正在研究c#项目并使用winform。
这里的问题是查询之前有效,但现在它无法正常工作
此处todaydate
是datetimePicker
,设置为短日期格式
我的数据类型为smalldatetime
,我得到的错误是
The conversion of a nvarchar data type to a
smalldatetime data type resulted in an out-of-range value.
The statement has been terminated.
如果我有两个日期时间选择器一个用于日期,第二个用于时间,那么我该如何插入?请你指导我
答案 0 :(得分:5)
AddWithValue
根据您传递的值确定参数的数据类型。
在你的情况下,你传递一个字符串,因此参数作为字符串传递给数据库而不是数据库所期望的日期时间
你应该改变那一行
cmd.Parameters.AddWithValue("@today", todaydate.Value);
答案 1 :(得分:4)
您当前正在传递 text 值,这意味着其他人必须将其解析为日期。不要那样做。鉴于您有DateTimePicker
,您应该使用它提供的DateTime
值:
cmd.Parameters.AddWithValue("@today", todaydate.Value);
...或首先使用特定类型(SqlDbType.SmallDateTime
)创建参数,然后使用todaydate.Value
设置值。重要的是避免字符串转换。
只要有可能,您应该避免将值转换为文本。保持它们的“自然”形式(例如,在这种情况下为DateTime
)尽可能多的时间:在输入时,解析为自然形式,如果您可以避免转换为字符串,请执行此操作!
答案 2 :(得分:0)
我认为数据库中的time7
列是smalldatetime
,您尝试为其分配string
。我不建议。
尝试使用Add()
这样的方法;
command.Parameters.Add("@today", SqlDbType.SmallDatetime);
command.Parameters["@today"].Value = todaydate.Value;
或者您也可以像这样使用AddWithValue()
;
cmd.Parameters.AddWithValue("@today", todaydate.Value);