从 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数据类型将日期插入到列中

sql中datatime使用,vs中datatimepicker使用问题,语言类型C#

在sql server2008中的日期类型是啥

c#从数据表中求和相同间隔、日期和类型的值