如何在c#中映射格式化的日期时间值



我有一个SQL Server和c# (ASP. net)之间的日期时间问题。. NET Core Web API)模型

这是我的模型:
public string Text { get; set; }   
public int StatusId { get; set; }    
public  DateTime CreatedAt { get; set; }

下面是我的SQL查询:

SELECT 
StatusId, 
(FORMAT(DS.CreatedAt, 'dd/MM/yyyy - hh:mm:ss')) AS CreatedAt,     
DS.CreatedBy, S.[Text] 
FROM
[Inspection].[Dossier_Status] DS 
INNER JOIN 
[DT_Inspection].[Status] S ON S.Id = StatusId 
WHERE 
DossierId = 'efb8702d-15cc-4503-8198-1dbca3f28bc6' 
ORDER BY 
DS.CreatedAt DESC

在控制器中运行此查询后,CreatedAt属性将具有如下值:

0001-01-01T00:00:00

但是我们应该有

06/09/2021 - 12:00:02

最后,在控制器中完成工作的方法,

string Sql = "SELECT StatusId, (FORMAT(DS.CreatedAt, 'dd/MM/yyyy - hh:mm:ss')), DS.CreatedBy, S.[Text] " +
" FROM[Inspection].[Dossier_Status] DS " +
"INNER JOIN [DT_Inspection].[Status] S ON S.Id = StatusId " +
"WHERE DossierId = '" + DossierId + "' " +
"ORDER BY DS.CreatedAt DESC";
using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
await using var sqlConnection = new SqlConnection(configuration.GetConnectionString("DefaultConnection"));
var result = await sqlConnection.QueryAsync<Dossier_StatusVUE>(Sql);

如何以所需的格式返回SQL属性CreatedAt?

不存在"格式化日期时间"这回事。如果格式化一个DateTime值,它不再是一个DateTime;它只是一个字符串。通常,您应该从数据库返回一个普通的(无格式的)DateTime值到模型中,并让视图处理任何格式化需求。即使对于Web API场景也是如此,其中视图可能只是JSON。

因此,在问题中,您看到坏值,因为模型期望DateTime,但我们提供了一个字符串,它无法解析它。我们可以通过从SQL中删除FORMAT调用来修复此问题,并让它返回实际的DateTime,如下所示:

string Sql = "SELECT StatusId, DS.CreatedAt, DS.CreatedBy, S.[Text] " +
" FROM[Inspection].[Dossier_Status] DS " +
"INNER JOIN [DT_Inspection].[Status] S ON S.Id = StatusId " +
"WHERE DossierId = @Dossier_ID " +
"ORDER BY DS.CreatedAt DESC";
using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
await using var sqlConnection = new SqlConnection(configuration.GetConnectionString("DefaultConnection"));
var result = await sqlConnection.QueryAsync<Dossier_StatusVUE>(Sql, new {Dossier_ID = DossierID});

现在正确的值应该进入result变量,同时我们修复了讨厌的sql注入问题。

然而,这只是修复的一半。下一步是更新视图,使其知道如何表示这个DateTime值。但是,关于如何构造视图,我们没有足够的信息,所以我不得不把这部分留给你。

相关内容

  • 没有找到相关文章