카테고리 없음

[씨#] C # Dapper의 메서드 호출에서 SP로 DATETIME 매개 변수 보내기

필살기쓰세요 2021. 1. 17. 17:47

내 작업 코드,

// Store procedure
CREATE PROCEDURE [dbo].[SPGetData] 
       @StartDate nvarchar(50) = null, -- change 
              @EndDate nvarchar(50) = null -- change 
              AS
                  BEGIN
                         -- change  in where condition
                                SELECT *
                                       FROM SampleTable
                                              WHERE 
                                                      DATEPART(yyyy,cast(SampleTable.CreateDate as date)) BETWEEN DATEPART(yyyy,cast(@StartDate as date)) and DATEPART(yyyy,cast(@EndDate as date))
                                                          END
                                                          END
                                                          GO
                                                          
                                                          // Visual Studio Code for dapper
                                                          public IEnumerable<ModelClass> GetDetails(DateTime? startdate, DateTime? enddate)
                                                              {
                                                              
                                                              var _para = new DynamicParameters();
                                                                  _para.Add("@StartDate", startdate);
                                                                      _para.Add("@EndDate", enddate);
                                                                          var _list = _con.Query<ModelClass>("SPGetData", _para, commandType: CommandType.StoredProcedure); // _con is SqlConnection _con = new SqlConnection("your connection string")
                                                                                      return _list;
                                                                                          }
                                                                                          
-------------------

다음 코드는 저에게 잘 작동합니다.

void Main()
{
    DateTime? s=null;
        DateTime? e=DateTime.Today;
            Test(s,e);
            }
            
            void Test(DateTime? startDate, DateTime? endDate)
            {
                var cs=@"data source=(local);database=test;integrated security=true";
                    using (var con = new SqlConnection(cs))
                        {
                                con.Open();
                                        var t = con.Query<string>("TestIt", new { startDate, endDate},
                                                        commandType: CommandType.StoredProcedure);
                                                        
                                                                $"List: {t.FirstOrDefault()}".Dump();
                                                                    }
                                                                    }
                                                                    

절차는 다음과 같습니다.

ALTER PROC TestIt
(
    @startDate datetime2,
        @endDate datetime2
        )
        AS
        BEGIN
            SELECT 'Start: ' + CASE WHEN @startDate IS NULL THEN 'Null' ELSE CONVERT(VARCHAR(35), @startDate, 106) END +
                        '\r\nEnd: ' + CASE WHEN @endDate IS NULL THEN 'Null' ELSE CONVERT(VARCHAR(35), @endDate, 106) END
                        END
                        

주석의 코드와 달리 매개 변수를 전달할 때 속성 이름을 정의하지 않습니다.

new { startDate, endDate}

프로 시저 매개 변수 이름은 메소드에 전달하는 변수와 동일합니다. 주석에서와 동일한 코드를 사용하려면 다음과 같이 수정할 수 있습니다.

cnn.Query<ModelClass>("SPGetData",  
   new { StartDate=startDate??null, EndDate=endDate??null}, 
       commandType:CommandType.StoredProcedure).ToList()
       


출처
https://stackoverflow.com/questions/39916023