我有一个使用SQL time(7)类型的现有数据库,该数据库不直接映射到.Net类型。
问题:使用Dapper,如何将SQL time列映射到.Net类型?
问题:当我尝试将SQL time(7)列隐式映射到DateTime使用Dapper-dot-net时,出现以下异常:
Dapper.dll中发生类型为'System.Data.DataException'的异常,但未在用户代码中处理
附加信息:错误分析列5(CheckInTime = 08:54:43.1470000-对象)
我以为它会自动映射到DateTime,但似乎没有这样做
看来您必须根据您的需要将 T-SQL 中的时间列显式转换/转换为 DateTime 或 TimeSpan。
如果您的时间代表一天中的某个时间(即下午 4:15)
string sql = @"SELECT CONVERT(DATETIME, InTime) AS CheckInTime FROM TimeLog";
var checkInTimes = _conn.Query<DateTime>(sql).ToList();
Run Code Online (Sandbox Code Playgroud)
如果您的时间代表一天中可为空的时间(即下午 4:15 或为空)
要处理可为空的时间,只需将目标 .Net 类型更改为可为空(DateTime?):
// Note: the OutTime column is nullable
string sql = @"SELECT CONVERT(DATETIME, OutTime) AS CheckOutTime FROM TimeLog";
var checkOutTimes = _conn.Query<DateTime?>(sql).ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,生成的 DateTime 对象的日期部分将设置为 1900-01-01。
如果您的时间代表一段时间(即 2 小时 47 分钟的运行时间)
在这种情况下,最好转换为 TimeSpan,它不会包含无效的 1900 日期,但也不允许在 .ToString() 中使用 AM/PM 格式
string sql = @"SELECT RunningTime FROM TimeLog";
var movieLength = _conn.Query<TimeSpan>(sql).ToList();
Run Code Online (Sandbox Code Playgroud)
感谢 Mauro 指出这个用例。
| 归档时间: |
|
| 查看次数: |
4453 次 |
| 最近记录: |