Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 执行存储过程时,将数据类型datetime转换为smalldatetime时发生dapper错误_C#_Sql Server_Stored Procedures_Dapper - Fatal编程技术网

C# 执行存储过程时,将数据类型datetime转换为smalldatetime时发生dapper错误

C# 执行存储过程时,将数据类型datetime转换为smalldatetime时发生dapper错误,c#,sql-server,stored-procedures,dapper,C#,Sql Server,Stored Procedures,Dapper,我的数据库中有一个smalldatetime类型的表。我有一个存储过程来更新表中的数据 存储过程获取一个带有更新日期的@LastLogin smalldatetime参数 在c#中,我有一个使用dapper调用存储过程的代码: loginDetails.LastLoginDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue; db.Execute("stp_UpdateLogin", loginDetails, commandTyp

我的数据库中有一个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));
}

c中是否有一个MinValue对象用于smalldatetime?就像有一个用于datetime一样?@developer82,不幸的是没有。您必须将min定义为
newDateTime(1900,01,01,00,00,00)