dapper 저장 프로 시저를 실행할 때 데이터 형식 datetime을 smalldatetime으로 변환하는 중 오류가 발생했습니다.

c# dapper sql-server stored-procedures

문제

내 데이터베이스에 smalldatetime 유형의 테이블이 있습니다. 그리고 그 테이블의 데이터를 업데이트하는 저장 프로 시저가 있습니다.

저장 프로시 저는 업데이트 할 날짜가있는 @LastLogin smalldatetime 매개 변수를 가져 @LastLogin smalldatetime .

C #에서는 dapper를 사용하여 저장 프로 시저를 호출하는 코드가 있습니다.

loginDetails.LastLoginDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue;
db.Execute("stp_UpdateLogin", loginDetails, commandType: CommandType.StoredProcedure);

이걸 실행할 때 다음 오류가 발생합니다.

System.Data.SqlClient.SqlException (0x80131904): Error converting data type datetime to smalldatetime.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) in d:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 3310
   at Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) in d:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 1310
   at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) in d:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 1185
   at Memoriez.Repositories.UsersRepository.UpdateUser(User user) in f:\Development\Memoriez\Memoriez.Repositories\UsersRepository.cs:line 58
ClientConnectionId:02cae914-507b-4c21-9799-8ec0940fc3d9

어떻게하면 dapper가 SQL이 기대하는 것을 통과시키는 지 확인할 수 있습니까?

인기 답변

그것은 ~ 때문에

(DateTime)System.Data.SqlTypes.SqlDateTime.MinValue = 1/1/1753 12:00:00 AM

최소값은

SMALLDATETIME  = 1900-01-01 00:00:00

도우미 클래스를 만들 수 있습니다.

public static class SqlSmallDateTime
{
    public static readonly SqlDateTime MinValue = new SqlDateTime(new DateTime(1900, 01, 01, 00, 00, 00));
}


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