카테고리 없음
[씨#] 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