首页 > 解决方案 > Tran_Venue_GetVenueOccupancyReports 需要参数“@StartDate”,但未提供该参数

问题描述

以下是我调用存储过程的 C# 代码。尽管我正在创建参数并将其传递给存储过程,但我仍然收到未提供参数的错误消息。

   public DataSet GetOccVenueDetailsForReportsDAL(long ClassID, long VenueID, DateTime StartDate, DateTime EndDate)
        {
            return ExecuteDataSet("Tran_Venue_GetVenueOccupancyReports", ParamBuilder.Par("ClassID", ClassID), ParamBuilder.Par("VenueID", VenueID), ParamBuilder.ParDate("StartDate", StartDate), ParamBuilder.ParDate("EndDate", EndDate));

        }

存储过程

ALTER PROCEDURE [dbo].[Tran_Venue_GetVenueOccupancyReports] --null,56
    (
    @VenueID BIGINT = NULL,
    @ClassID BIGINT = NULL,
    @StartDate DATETIME,
    @EndDate DATETIME
    )

AS
BEGIN 
--SET FMTONLY OFF
--declare @StartDate as DATETIME;
CREATE TABLE #TempTable1(SessionID BIGINT,[SessionTime] DATETIME) 

While @StartDate <= @EndDate
BEGIN 
        INSERT INTO #TempTable1( SessionTime )
        VALUES  ( @StartDate)

    SET @StartDate = DATEADD(minute,30,@StartDate)
END

SELECT Distinct V.ID as 'VenueID', V.PrimaryName AS 'VenueName', 
        CRS.ID as 'CourseID', CRS.PrimaryName as 'CourseName',
        CLS.ID as 'ClassID', CLS.PrimaryClassTitle as 'ClassTitle',
        --temp.[SessionTime] AS 'AvailableTime', 
        CONVERT(CHAR(16), s.StartTime, 120) + ' - ' + CONVERT(CHAR(16), s.EndTime,   120) AS AvailableTime,
        temp2.[SessionTime] AS 'OccupiedTime'
        FROM dbo.Venues V
        --LEFT OUTER JOIN dbo.Tran_CourseVenues CRV ON V.ID = CRV.VenueID AND CRV.IsDeleted = 0 AND CRV.IsActive = 1
        LEFT OUTER JOIN dbo.VenueOpenMapping CT ON V.ID = CT.OpenId AND CT.IsDeleted = 0 AND CT.IsActive = 1
        LEFT OUTER JOIN dbo.TMS_classes CLS ON CT.OpenId = CLS.ID AND CLS.IsDeleted = 0 AND CLS.IsActive = 1
        LEFT OUTER JOIN dbo.TMS_Courses CRS ON CLS.CourseID = CRS.ID AND CRS.IsDeleted = 0 AND CRS.IsActive = 1
        LEFT OUTER JOIN dbo.TMS_Sessions S ON CT.ID = S.VenueID AND CT.OpenId = S.ClassID AND s.IsDeleted = 0 AND s.IsActive = 1
        LEFT JOIN #TempTable1 Temp ON S.StartTime <= Temp.[SessionTime] AND S.EndTime >= Temp.[SessionTime] 
        LEFT JOIN #TempTable1 Temp2 ON S.StartTime >= Temp.[SessionTime] AND S.EndTime <= Temp.[SessionTime] 

WHERE (V.IsDeleted = 0 AND V.IsActive = 1) 
        AND (@VenueID IS NULL OR @VenueID = 0 OR CT.VenueID = @VenueID )
        AND (@ClassID IS NULL OR CLS.ID = @ClassID)
        --AND (cls.id=0
        --GROUP BY v.Name,CLS.StartTime,CLS.EndTime

END

标签: c#sqlasp.net

解决方案


推荐阅读