【发布时间】:2023-01-27 23:08:46
【问题描述】:
我们正在从 MS SQL 查询中填充多个数据表。在我们的查询本身中,我们使用 CAST 来确保日期是短日期。像这样:
CAST(jobs.[jobStDate] AS Date) AS JobStartDate
所以 myDate 正确显示为 12/4/2019。然后,我们稍后将使用以下内容导出这些数据:
For Each col As DataColumn In myDataTable.Columns
myExportData += Chr(34) & col.ColumnName.ToString & Chr(34) & ":" & Chr(34) & row(col).ToString & Chr(34) & ","
Next
所以列名和它的值以这样的格式导出:
"JobStartDate":"12/3/2019 12:00:00AM"
这非常有效,因为我们可以即时更改查询,并且不需要更改导出功能,不需要设置 DataTables,一切都是动态的。问题是该值正在附加时间,我不确定为什么,因为它不在 SQL 数据中。因此,即使我们用短日期 12/3/2019 填充数据表,它也会添加时间。现在我们有一个 hacky 解决方法:
myValue = row(col).ToString.Trim
If String.IsNullOrEmpty(myValue) = False Then
myValue = Replace(row(col).ToString, " 12:00:00 AM", "").Trim
End If
myExportData += Chr(34) & col.ColumnName.ToString & Chr(34) & ":" & Chr(34) & myValue & Chr(34) & ","
这当然有效,但我想解决这个问题,这感觉就像一个创可贴。 DataTable 是否推断数据类型并默认为长日期时间字符串?如果是这样,有没有一种方法可以防止这种情况发生,或者有一种方法可以在我的循环中检测并修复它,或者只进行我已经在做的替换是否更容易。
【问题讨论】:
-
格式化是前端的工作,而不是数据层的工作。但我觉得你的数据类型是数据库中的日期时间?对于您的导出,为什么不指定您想要的格式而不是依赖默认行为?
-
唯一要解决的问题是低效的格式化代码。
date是一个二进制值,它根本没有格式。格式仅在将该二进制值格式化为字符串或解析字符串以获取DateTime或DateOnly时适用。如果您想从该日期生成一个字符串,您可以指定实际的格式/语言环境,而不是使用默认值。例如myExportData+=col.DateColumn.ToString("yyyy-MM-dd")
标签: sql-server vb.net datatable