从 C# 保存到 SQL 中的 DATE 类型列 - Linq to SQL
Posted
技术标签:
【中文标题】从 C# 保存到 SQL 中的 DATE 类型列 - Linq to SQL【英文标题】:Saving to DATE type column in SQL from C# - Linq to SQL 【发布时间】:2020-06-08 03:24:55 【问题描述】:我在将 SQL 中的日期类型列从 Linq 保存到 C# 中的 SQL 时遇到问题
问题是我在 SQL 中有一个日期类型列,但是当我将其拉入 dbml 时 - 属性交换为 DateTime。
每当我尝试通过 Linq to SQL 更新此字段时,都会出现以下错误:
字符串或二进制数据将被截断。声明已终止。
现在我知道这是由于 Linq to SQL 试图保存的类型是 DateTime 而列本身是 Date - 但到目前为止我还没有找到任何解决方案。
当我将表拉入 dbml 时,如何让 Linq to SQL 将列类型视为 Date 而不是 DateTime - 或者如何将 DateTime 作为 DateTime 保存到 Date 类型列。
谢谢
编辑:无需提交整个过程,表就在 dbml 中,我通过 Id 选择行
然后,我将更新其中一个字段 (DateField),该字段在 SQL 中具有日期类型(由于没有日期类型,该字段已在 dbml 中作为 DateTime 拉过)并提交更改。
var rowToUpdate = _db.Orders.First(o => o.Id == Id);
rowToUpdate.DateField = Convert.ToDateTime(txtNewDate.Text).Date;
_db.SubmitChanges();
除此之外,下面显示了 dbml(已编辑以显示字段名称)
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.[Order]")]
public partial class Order : INotifyPropertyChanging, INotifyPropertyChanged
[...]
private int _Id;
private System.Nullable<System.DateTime> _DateField;
[...]
DateTime 属性不能更改为 Date(据我所知),因此每当我尝试保存到它时,它都需要 DateTime 但会导致问题,因为它需要截断它以保存为预期SQL 中的日期类型 - 引发错误。
【问题讨论】:
你能编辑你的问题并显示给你错误的代码吗?您可能只需要将日期值作为字符串传递,例如:dateVal.ToString("yyyy-MM-dd");
你真的在使用 linq-to-sql 而不是 EF 吗?如果是这样,您可能想要切换。
@dvo 已更新以显示更新字段的代码。不幸的是,项目的其余部分是这样工作的,所以在不改变多个元素的情况下我不能,但我确实认为实体框架是一个好处——两者都有优点。此外,我确实尝试了将 DateTime 格式设置为字符串 - 但我不能隐式地将类型“字符串”更改为“日期时间”,因为它在 dbml 中显示 - 我可以将 dbml 更改为具有“字符串”类型,看看是否工作,无需更改 SQL 表本身。
【参考方案1】:
试试这个:
var rowToUpdate = _db.Orders.First(o => o.Id == Id);
rowToUpdate.DateField = Convert.ToDateTime(txtNewDate.Text).Date.ToString("yyyy-MM-dd");
_db.SubmitChanges();
【讨论】:
我有,不幸的是我收到错误无法将类型 'string' 隐式转换为 'System.DateTime?'以上是关于从 C# 保存到 SQL 中的 DATE 类型列 - Linq to SQL的主要内容,如果未能解决你的问题,请参考以下文章
请问在c# winform中怎么将文本框中的数值保存到数据库中money类型的字段中???
SQL Server 中的 tinyint 到 C# 中的字节
Sql Server如何使用date数据类型将日期插入到列中