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

如何使用SqlDataRecord上传DateOnly对应SQL Server的date字段?

解决SqlDataRecord上传DateOnly类型到SQL Server date字段的问题

核心思路

SqlDataRecord确实没有直接的SetDateOnly方法,但可以通过类型转换绕开这个限制——把DateOnly转换为SQL Server支持的DateTime或SqlDateTime类型,再绑定到SqlDbType.Date类型的字段上。

具体实现方法

方法1:转换为DateTime类型

利用DateOnly.ToDateTime()方法将其转为时间部分为00:00:00的DateTime,直接写入SqlDbType.Date字段:

// 1. 定义用户表的SqlDataRecord结构(对应SQL Server的date字段)
var record = new SqlDataRecord(
    new SqlMetaData("YourDateColumn", SqlDbType.Date)
);

// 2. 本地DateOnly变量
DateOnly localDate = DateOnly.FromDateTime(DateTime.Now);

// 3. 转换为DateTime并设置值
record.SetDateTime(0, localDate.ToDateTime(TimeOnly.MinValue));
// 或者用SetValue自动适配类型
record.SetValue(0, localDate.ToDateTime(TimeOnly.MinValue));

方法2:转换为SqlDateTime类型

直接将DateOnly转为SqlDateTime,明确匹配SQL Server的date类型:

var record = new SqlDataRecord(
    new SqlMetaData("YourDateColumn", SqlDbType.Date)
);

DateOnly localDate = DateOnly.FromDateTime(DateTime.Now);
// 转换为SqlDateTime
SqlDateTime sqlDate = new SqlDateTime(localDate.ToDateTime(TimeOnly.MinValue));
record.SetSqlDateTime(0, sqlDate);

简化封装(可选)

如果需要批量处理,建议封装扩展方法减少重复代码:

public static void SetDateOnly(this SqlDataRecord record, int ordinal, DateOnly date)
{
    record.SetDateTime(ordinal, date.ToDateTime(TimeOnly.MinValue));
}

之后直接调用record.SetDateOnly(0, localDate)即可完成赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:29