日期:2014-05-18  浏览次数:20963 次

MSSQL数据库的时间格式怎么来的?
MSSQL的datetime格式一定是“2012-01-04 13:06:31.000”吗?哪里查看数据库的时间格式和修改?

我写的程序在我这边跑是OK的,但到客户那边就报时间溢出
“SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM ”

我这边又无法模拟,看代码觉得完全OK啊。所有涉及到时间的都加了DateTime.Now啊,而且数据库的日期字段都设成可为空。

所以我猜会不会跟用户环境有问题,比如说软件装在PC A上,数据库装在PC B上,但PC A的时间格式是yyyy/MM/dd这种,但数据库却是MM/dd/yyyy这种。

如果谁也碰到过这种情况,帮忙分析一下,谢谢!

C# code

if (usersEntity == null)
            {
                usersEntity = new UsersEntity
                {
                    GroupID = groupEntity.GroupID,
                    UserName = userName,
                    UserType = "USER",
                    UserEmail = email ?? string.Empty,
                    AddDate = DateTime.Now,
                    UpdateDate = DateTime.Now,
……



------解决方案--------------------
有可能是本地时间格式问题吧。
必须读取 本地时间吗? 可以考虑读取 网络时间。

------解决方案--------------------
这个跟那个机器的时间格式设置有关,调整下格式就OK啦。

控制面板-》“区域和语言选项”-》“区域选项(自定义)”重新调整时间格式和分隔符
------解决方案--------------------
时间可以在vs 中查一下数据记录,可以看以日期格式 yyyy-MM-dd hh:ss:ms
------解决方案--------------------
C# code

//??
string sql ="....UpdateDate=getdate()";

------解决方案--------------------
跟SQL的datetime格式无关,SQL中没有时间格式给你设置,看你的错误提示,并不是时间格式问题,而是客户端得到的并不是datetime类型,强行insert入所导致的错误.
------解决方案--------------------
那你数据库中时间字段的值究竟保存的格式是什么?

你调整机器时间格式后,然后再插入一条数据,再读出来试过没有。

------解决方案--------------------
你让他重现错误并截屏
------解决方案--------------------
SQL貌似不存在时间格式,在SSMS中查出来的只是显示的样子
问题可能出在你保存数据的部分,就是insert或update部分,
是不是没有使用SqlParameter而是接拼的
------解决方案--------------------
1.首选用sql profiler跟踪一下最终执行的sql语句,看下是不是传入的时间有问题

2.可以在sql中用isdate判断下是否是日期

------解决方案--------------------
他不会搞的拼接的吧,这个你先用Sql Server Profiler来探查一下执行的是什么SQL语句,然后把SQL贴出来再看
Sql Server Profiler这个搜一下就知道怎么用了