SqlDbType.Time 溢出。值超出范围

use*_*151 7 sql sql-server sql-server-2008 c#-3.0 c#-4.0

我想将时间存储在表中,并将其time(7)作为存储时间的数据类型。当我减去两个DateTimes 时,我得到了变量"1.18:36:36.7484253"的结果TimeSpan。但问题是,当我在表中插入这个值时,出现以下错误:

SqlDbType.Time溢出。'1.18:36:36.7484253'超出范围。必须在00:00:00.0000000和之间23:59:59.9999999

我知道这个错误,我的问题是我可以使用什么数据类型。我正在使用 SQL Server 2008 和 C#。

Jul*_*der 6

SQL Server 存储的时间不包含日期。有效范围应介于00:00:00.0000000和之间23:59:59.9999999,如消息中所示。

为了节省天数,您可以转换TimeSpanLong方法Ticks或对分钟和秒进行求和。


小智 0

要解决该问题,您需要执行以下操作:

您好,您需要创建一个新的 TimeSpan 变量。

//////// Calculation for TimeStamp //////////

                DateTime fechaAux       = DateTime.Now;
                DateTime fechaIngresoAM = new DateTime(fechaAux.Year, fechaAux.Month, fechaAux.Day,  8, 30, 00);


                TimeSpan auxIngresoAM   = ingresoAM.Subtract(fechaIngresoAM);
                TimeSpan resultadoRetrasoIngresoAM = new TimeSpan(auxIngresoAM.Hours, auxIngresoAM.Minutes, auxIngresoAM.Milliseconds);



                command.Parameters.Add(new SqlParameter("@retraso_ingreso_am", SqlDbType.Time));
                command.Parameters["@retraso_ingreso_am"].Value = resultadoRetrasoIngresoAM;

                command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

它将按您的预期工作。

  • “它会如你所期望的那样工作。” 不,真的不会。OP 的工作时间约为 42 小时。SQL Server“时间”数据类型旨在保存“一天中的时间”,而不是“时间跨度”。因此,它不支持任何大于 24 小时的值(也不支持负数、加法等,您也希望时间跨度数据类型支持这些值) (4认同)