You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Devart dotConnect Express MySQL获取MySQL时间小数部分

解决Devart dotConnect MySQL读取DateTime丢失小数部分的问题

问题重现

现有MySQL表结构:

CREATE TABLE `table1` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `date` date,
  `timestamp2` timestamp(2),
  `datetime3` datetime(3),
  `time6` time(6),
  PRIMARY KEY (`id`)
);

插入测试数据:

insert into table1(`date`,`timestamp2`,datetime3,time6)
values('2000-01-01','2001-01-01 01:01:01.23',
       '2002-01-01 01:01:01.243','01:01.234893');

insert into table1(`date`,`timestamp2`,datetime3,time6) 
values(null,null,null,null);

使用Devart dotConnect的C#代码读取后,输出的timestamp2和datetime3的DateTime值丢失了小数部分,仅显示到秒。

解决方案

1. 修改连接字符串,启用小数秒支持

Devart dotConnect默认未开启DateTime类型的小数精度读取,需要在连接字符串中添加UseFractionalSeconds=true参数,确保驱动读取并保留时间的小数部分。

示例连接字符串:

string ConnString = "server=localhost;database=testdb;user id=root;password=xxx;UseFractionalSeconds=true;";

2. 自定义格式化输出DateTime值

默认的DateTime.ToString()不会显示毫秒/微秒部分,需要使用自定义格式字符串来输出完整的时间(包括小数部分)。修改代码中的输出逻辑:

foreach (DataColumn dc in dt.Columns)
{
    object ob = dr[dc.ColumnName];
    string typeName = ob.GetType().ToString();
    string valueStr = "";
    
    if (ob is DateTime dateVal)
    {
        // 自定义格式,显示到微秒(可根据实际存储精度调整)
        valueStr = dateVal.ToString("yyyy-MM-dd HH:mm:ss.ffffff");
    }
    else if (ob is DBNull)
    {
        valueStr = "(null)";
    }
    else
    {
        valueStr = ob.ToString();
    }
    
    sb.AppendLine($"{dc.ColumnName} = {typeName} | value = {valueStr}");
}

3. 代码中使用小数部分数值

如果需要在业务逻辑中使用时间的小数部分,可以通过DateTime.Millisecond获取毫秒值,或者通过DateTime.Ticks计算更精确的单位(1 Tick = 100纳秒):

if (ob is DateTime dateVal)
{
    // 获取毫秒部分
    int milliseconds = dateVal.Millisecond;
    // 获取微秒部分(通过Ticks计算)
    int microseconds = (int)(dateVal.Ticks % 10000000 / 10);
}

修改后的输出示例

调整后,输出会显示完整的时间小数部分:

Row 1
id = System.Int64 | value = 1
date = System.DateTime | value = 2000-01-01 00:00:00.000000
timestamp2 = System.DateTime | value = 2001-01-01 01:01:01.230000
datetime3 = System.DateTime | value = 2002-01-01 01:01:01.243000
time6 = System.TimeSpan | value = 01:01:00.2348930

Row 2
id = System.Int64 | value = 2
date = System.DBNull | value = (null)
timestamp2 = System.DBNull | value = (null)
datetime3 = System.DBNull | value = (null)
time6 = System.DBNull | value = (null)

内容的提问来源于stack exchange,提问作者mjb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:55:15