0

我想在几天之间创建一个报告,我选择每天生成报告。当我将时间间隔指定为 24:00:00.000 时,它会给出错误:日历 System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime。

23:59:59 导致我的报告延迟。

日期时间格式的 1 天的长度是多少?

这是我在 MSSQL Server 中的程序

PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime,
    @TimeRange time
AS
BEGIN

    SET NOCOUNT ON;

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime);

     with TimeRanges as (
  select @Start as StartTime, @Start + @TimeRange as EndTime
  union all
  select StartTime + @TimeRange, EndTime + @TimeRange
    from TimeRanges
    where EndTime < @Finish )
  select StartTime, EndTime, Count( Test.ScenarioID ) as TotalPeaks
    from TimeRanges as TR left outer join
      dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime
    group by TR.StartTime, TR.EndTime   
END

并调用此程序是here

private DataSet GetStoredProcedure1(DateTime StartTime, DateTime FinishTime, DateTime TimeRange)
        {
            DataSet ds = new DataSet();
            SqlCommand cmd = new SqlCommand("Procedure1", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@Start", SqlDbType.DateTime).Value = StartTime;
            cmd.Parameters.AddWithValue("@Finish", SqlDbType.DateTime).Value = FinishTime;
            cmd.Parameters.AddWithValue("@TimeRange", SqlDbType.DateTime).Value = TimeRange;

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            da.Fill(ds);
            return ds;
        }

当我给出时间范围 00:05:00.00 5 分钟 01:00:00.000 1 小时时,我的代码没有任何问题,但是当我想要每日报告时 24:00:00.00 不起作用。我该如何解决?

4

1 回答 1

2

数据类型的范围time是 00:00:00 到 23:59:59.999 ...。因此,即使您让 C# 为您创建正确的 DateTime 对象,您也无法使用您在存储过程中选择的数据类型做您想做的事情。

由于 SQL Server 没有像 .NET 这样的 TimeSpan 数据类型(这将是正确的选择),一个简单的替代方法是传递@TimeRange一个用于指定秒/分钟/小时数的整数(取决于您想要的粒度提供)。在 T-SQL 中,将值添加到@Start使用DATEADD函数.

于 2012-10-22T13:29:49.380 回答