2012-10-22 106 views
0

我想在幾天之間創建報告,並選擇每天生成報告。當我將時間間隔設置爲24:00:00.000時,會顯示以下錯誤: 日曆System.Globalization.GregorianCalendar中不支持該字符串表示的DateTime。日期時間1天長度

23:59:59導致我的報告延誤。

什麼是1天日期時間格式的legth?

這裏是我在MSSQL服務器

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 

程序,並調用這個過程是在這裏

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不工作。我該如何解決這個問題?

+0

哪種語言?請提供一些代碼讓我們更容易。 – WozzeC

+0

我正在C#.NET上工作 – cihata87

+0

datetime的長度基本上是DateTimeValue.AddDays(1)。如果你提供了一些代碼,我可以告訴你在哪裏放置它。 – WozzeC

回答

2

range of the time data type is 00:00:00 to 23:59:59.999...。因此,即使您有C#爲您創建正確的DateTime對象,也無法按照您在存儲過程中選擇的數據類型進行操作。

由於SQL Server沒有像.NET這樣的TimeSpan數據類型(這將是正確的選擇),所以一個簡單的選擇是將@TimeRange作爲整數用於指定秒/分鐘/小時數在你想提供的粒度上)。在T-SQL中,使用DATEADD function將值添加到@Start

+0

謝謝我解決了它 – cihata87