0

日ごとにレポートを作成したいのですが、レポートを毎日生成することを選択します。時間間隔を 24:00:00.000 として指定すると、エラーが発生します。文字列で表される DateTime は、カレンダー System.Globalization.GregorianCalendar ではサポートされていません。

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

このプロシージャをここに呼び出します

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 に答える