none
SqlDateTime 溢出 RRS feed

  • 问题

  • SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间;

    我是在做添加资料,页面传给后台的日期StartDate

    public ActionResult AddEvent(special_events events,string StartDate,string EndDate)
    {
                events.StartDate = Convert.ToDateTime(StartDate);
                events.EndDate = Convert.ToDateTime(EndDate);
                System.Diagnostics.Debug.WriteLine("startdate="+events.StartDate);

    }

    这样日期不为NULL,而在DB的字段中StartDate设置为NULL类型,希望能获取到您的帮助。

    2013年8月14日 7:55

答案

  • Hi Jonlinhero,

    问题描述的不是很清晰。我猜测可能是DateTime数据类型转换时候出现问题。

    c#DateTime的取值范围在’1/1/0001’’12/31/9999’.这点和sql是不一样的,所以你必须在代码中自己判断日期是不是超出界限。

    首先定义SqlDateTime的边界值。

    DateTime SqlMinDateTime = Convert.ToDateTime("1/1/1753 12:00:00 AM");

                DateTime SqlMaxDateTime = Convert.ToDateTime("12/31/9999 11:59:59 PM");

    然后在转化成功后判断是不是在范围内。

    events.StartDate = Convert.ToDateTime(StartDate);

                if (events.StartDate < Program.SqlMinDateTime)

                {

                    throw new ArgumentException();

                }

    这样写到数据库中就不会出现错误。

    还有一般DB中的时间字段需要做判断,所以尽可能不要设置NULL类型,如果设置最好把默认值写一下”getdatetime();”

    • 已标记为答案 jonlinhero 2013年8月18日 6:00
    2013年8月15日 6:28