为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DB Version: 0x7000c
【操作系统】:Win11
【CPU】:x86
【问题描述】*:当DATETIME的毫秒部分小于100毫秒时,DmProvider(1.1.0.16649)返回的结果有误!(使用DateTimeOffset时,则连毫秒部分的精度都完全丢失掉)
CREATE TABLE "TST_DT"
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"DT" DATETIME(6),
"DTO" DATETIME(6) WITH TIME ZONE,
NOT CLUSTER PRIMARY KEY("ID"));
insert into "TST_DT"("DT", "DTO")
VALUES(TIMESTAMP '2023-09-11 11:23:55.068000',TIMESTAMP '2023-09-11 11:23:55.068000');
commit;
static void Main(string[] args)
{
string connStr = "Server=localhost;Port=5236;Database=DMMENG;UID=SYSDBA;PWD=SYSDBA;";
using (var conn = new DmConnection(connStr))
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "select ID,DT,to_char(DT,'YYYY-MM-DD HH24:MI:SS.FF3') AS DT_STR,DTO,to_char(DTO,'YYYY-MM-DD HH24:MI:SS.FF3') AS DTO_STR from TST_DT";
var rd = cmd.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(rd);
Console.WriteLine("JSON:");
var json = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
Console.WriteLine(json);
Console.WriteLine("-----------------");
if (dataTable.Rows.Count > 0)
{
Console.WriteLine("DateTime:");
var dt = (DateTime)dataTable.Rows[0]["DT"];
Console.WriteLine($"\tMillisecond => {dt.Millisecond}");
Console.WriteLine($"\tToString => {dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff")}");
Console.WriteLine("DateTimeOffset:");
var dto = (DateTimeOffset)dataTable.Rows[0]["DTO"];
Console.WriteLine($"\tMillisecond => {dto.Millisecond}");
Console.WriteLine($"\tToString => {dto.ToString("yyyy-MM-dd HH:mm:ss.ffffff")}");
}
}
Console.WriteLine("End!");
Console.ReadLine();
}
以下是程序执行结果:
JSON: [ { "ID": 1, "DT": "2023-09-11T11:23:55.68", "DT_STR": "2023-09-11 11:23:55.068", "DTO": "2023-09-11T11:23:55+08:00", "DTO_STR": "2023-09-11 11:23:55.068" } ] ----------------- DateTime: Millisecond => 680 ToString => 2023-09-11 11:23:55.680000 DateTimeOffset: Millisecond => 0 ToString => 2023-09-11 11:23:55.000000 End!
可以看到,如果时间先转换为字符串再返回,结果是符合预期的!但如果是直接查询,则返回的毫秒放大了10倍(继续测试发现,如果毫秒部分超过100毫秒则结果又是正常的。。。)
注:以上测试基于DM8+.NET DmProvider(1.1.0.16649),其他版本未测试
谁可以指点一下问题该怎么解决吗?
对于这个问题,我反馈下,请您暂时用sql转化成字符串处理下,谢谢!