如何使用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
相关产品推荐
相关产品推荐

