코드에서 저장 프로 시저를 실행할 때 varchar를 datetime으로 변환하는 중 오류가 발생했습니다.

c# dapper sql sql-server

문제

내 C # 응용 프로그램 내에서 Dapper를 사용하여 저장 프로 시저를 호출합니다.

return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure);

check_dataTVP 허용하기 때문에 dataToCheckDataTable 입니다. 이 테이블 유형에는 2 개의 열 (from_date varchar (20), to_date varchar (20))이 있으며 다음 클래스를 기반으로합니다.

public class DataToCheckType
{
    public DateTime? from_date {get; set;}
    public DateTime? to_date {get; set;}
}

Dapper는 다음을 SQL Server로 보냅니다.

declare @p1 dbo.CheckDataType
insert into @p1 values('2017-04-19 00:00:00','2017-04-19 00:00:00')

exec check_data @dataToCheck=@p1

SP 자체는 간단합니다. SQL 문을 작성하여 실행되는 함수를 호출합니다.

DECLARE @sql nvarchar(max) = dbo.GetSql(@dataToCheck);

DECLARE @results TABLE (Id int);
INSERT INTO @results EXECUTE(@sql);

GetSql 함수는 다음과 같이 시작됩니다.

DECLARE @fromDate datetime;
DECLARE @toDate datetime;

SELECT 
    @fromDate = CONVERT(datetime, from_date, 120),
    @toDate = CONVERT(datetime, to_date, 120),
FROM 
    @dataToCheck;

그리고 예상대로 SQL 문을 계속 작성합니다. T-SQL 에서 SP 를 실행할 때 모든 것이 잘 동작합니다.

그러나 코드에서 동일한 실행하면 다음 오류가 발생합니다.

check_data : 241 문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환에 실패했습니다.

SP가 T-SQL에서는 작동하지만 코드에서 호출 할 때는 그렇지 않습니다. 날짜가 왜 잘못 되었나요?

수락 된 답변

테이블 유형의 열을 varchar(20) 에서 date 로 변경하여 문제를 해결했습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow