利用DateTimePicker的Value插入SQLServer的一点小疑惑

elude 2012-05-31 11:45:32
最近在用winform做一个系统,但是我遇到了一件比较奇怪的事情。我的代码如下:


insertToTable(taskCode, taskStart.Value, taskEnd.Value);

public void insertToTable(string taskNO, DateTime startTime, DateTime endTime)
{
commandToSQL("INSERT INTO db_task (taskCode, startTime, endTime) VALUES ('" + taskNO + "', '" + startTime + "', '" + endTime + "'")");
}

其中SQLServer中startTime和endTime均为smalldatetime类型,两个DateTimePicker都为CustomFormat都为"yyyy-MM-dd HH:mm:ss"

现在的问题是,我用笔记本上的XP系统开发时,插入没有任何问题,而用家里的台式机Win7开发时,总是提示插入失败,经过单步调试,发现在XP中,传入的startTime和endTime的值为"2012-5-31 11:12:46"这种类型,而Win7中,传入的则为"2012-5-31 星期四 11:12:46",那么显然肯定不能插入,但是我不知道发生这种情况的原因是什么。

昨天试了一晚上,发现另一个问题,如果把两个DateTime换成string,而DateTimePicker的Visible设为false,则插入SQL的startTime.Text和endTime.Text都为空,也就是SQL中默认的"1900-01-01 00:00:00"的格式。。。这个也不清楚到底是为什么。

以上两个问题,特来此赐教,不胜感激。
...全文
192 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
天下如山 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
第二个问题 应该是datetime类型的默认值,.net机制里的。

他说的是 DateTimePicker.Text 里是空字符串
[/Quote]
知道 如果值为空 而且你实体类中定义的应该是datetime类型 datetime的默认值在.net下面就是那个值。
貌似以前也遇到过 但没深究。
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
不管 DateTimePicker 里的格式是什么,insertToTable 方法里的参数只是 DateTime 类型的,与 DateTimePicker 已经无关了,而是和系统设置有关了,为了要统一,在 insertToTable 里你要加上把 DateTime 转字符串的方法,一般 DateTime实例.ToString("yyyy-MM-dd HH:mm:ss")
elude 2012-05-31
  • 打赏
  • 举报
回复
第一个问题已经确定是系统显示时间的格式被优化软件更改所致,第二个问题还没想明白,感谢avphoenixi和sibiyellow的回复,结贴
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
第二个问题 应该是datetime类型的默认值,.net机制里的。
[/Quote]
他说的是 DateTimePicker.Text 里是空字符串
天下如山 2012-05-31
  • 打赏
  • 举报
回复
第二个问题 应该是datetime类型的默认值,.net机制里的。
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
关于第二个问题,不知道各位有什么看法?还麻烦各位帮我说明一下。
[/Quote]
我试了也是这样,是控件内部设计问题吧,要取值,最好还是取 Value ,再格式化
elude 2012-05-31
  • 打赏
  • 举报
回复
关于第二个问题,不知道各位有什么看法?还麻烦各位帮我说明一下。
天下如山 2012-05-31
  • 打赏
  • 举报
回复
应该就是那样的问题。
elude 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不管 DateTimePicker 里的格式是什么,insertToTable 方法里的参数只是 DateTime 类型的,与 DateTimePicker 已经无关了,而是和系统设置有关了,为了要统一,在 insertToTable 里你要加上把 DateTime 转字符串的方法,一般 DateTime实例.ToString("yyyy-MM-dd HH:mm:ss")
[/Quote]

感谢您的回复,您提醒了我,似乎是我在家里的台式机用过某个系统优化软件,然后选了一个“在右下角显示星期几”这个功能,可能跟这个有关系,晚上回去恢复下试试看是不是这样,如果是我真是自己给自己挖了个坑。。。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧