2013-01-18 128 views
2

我正在使用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. 

如果我有两个日期时间选择器一个日期和第二个时间然后我该如何插入?请你能指导我

回答

4

你”目前正在传递文本值,这意味着别的东西不得不将其解析为日期。不要这样做。既然你已经有了一个DateTimePicker,你应该只使用DateTime值提供:

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

...或与特定类型(SqlDbType.SmallDateTime)先创建参数,然后使用todaydate.Value设置的值。重要的一点是避免字符串转换。

只要有可能,您应该避免将值转换为文本。在尽可能多的时间内保持它们的“自然”形式(例如DateTime):在输入时,解析为自然形式,并且如果可以避免转换为字符串,那就这样做!

+0

乔恩你能帮助我,如果我有两个日期时间选择器一个日期和第二个时间然后如何插入? –

+0

@shariq_khan:然后使用类似'datePicker.Value.Date + timePicker.Value.TimeOfDay'构造一个'DateTime'值。 –

+0

sir value.timeofday将返回当前时间或我在时间选择器中设置的时间? –

5

AddWithValue从你传递的值中确定参数的数据类型。

在你的情况,你传递一个字符串,因此参数传递给数据库作为一个字符串而不是由数据库预计日期时间

你应该改变该行

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

史蒂夫你能帮我一次吗?我已更新我的问题。两个日期时间选择器然后该怎么做? –

0

我认为你的time7列在数据库中是smalldatetime,你试图给它分配一个string。我不建议。

尝试用Add()这样的方法;

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

,或者您可以使用AddWithValue()的也是这样的;

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

谢谢先生,但todaydate.value结果日期和时间,但我有两个日期时间选择器一个日期和第二个时间我希望日期和时间去单细胞 –