C# 插入语句时插入语句出错

C# 插入语句时插入语句出错,c#,C#,我正在从事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 te

我正在从事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.

如果我有两个日期时间选择器,一个用于日期,第二个用于时间,那么如何插入?请您指导我

AddWithValue
根据您传递的值确定参数的数据类型

在本例中,您传递的是一个字符串,因此参数将作为字符串而不是数据库所期望的日期时间传递给数据库

你应该换一条线

cmd.Parameters.AddWithValue("@today", todaydate.Value);

您当前正在传递文本值,这意味着其他东西必须将其解析为日期。不要那样做。假设您有一个
DateTimePicker
,您应该只使用它提供的
DateTime
值:

cmd.Parameters.AddWithValue("@today", todaydate.Value);
。。。或者首先使用特定类型(
SqlDbType.SmallDateTime
)创建参数,然后使用
todaydate.value
设置值。重要的一点是避免字符串转换


尽可能避免将值转换为文本。尽可能多地保持它们的“自然”形式(例如,在本例中为
DateTime
):输入时,解析为自然形式,如果可以避免转换为字符串,那么就这样做

我认为数据库中的
time7
列是
smalldatetime
,您试图给它分配一个
字符串。我不建议这样做

尝试这样的方法

command.Parameters.Add("@today", SqlDbType.SmallDatetime);
command.Parameters["@today"].Value = todaydate.Value;
cmd.Parameters.AddWithValue("@today", todaydate.Value);
或者你也可以像这样使用

command.Parameters.Add("@today", SqlDbType.SmallDatetime);
command.Parameters["@today"].Value = todaydate.Value;
cmd.Parameters.AddWithValue("@today", todaydate.Value);

史蒂夫,你能再帮我一次吗?我已经更新了我的问题。如果我有两个日期时间选择器,一个用于日期,另一个用于时间,那么如何插入?@shariq_khan:然后使用
datePicker.value.date+timePicker.value.TimeOfDay
sir value.TimeOfDay将返回当前时间或我在时间选择器中设置的时间是多少?@shariq_khan:你是先尝试的吗?您是否在MSDN中查找了
TimeOfDay
属性?如果它返回的是当前时间,为什么我们需要
timePicker.Value
部分呢?对不起,我应该先看看msdn。但是谢谢你先生的帮助谢谢先生但是今天的日期。值的结果是日期和时间,但是我有两个日期时间选择器,一个是日期,第二个是时间,我想在单个单元格中输入日期和时间