从代码中保存数据库中的DateTime

时间:2013-06-05 22:00:57

标签: c# entity-framework

我在使用EF在数据库中保存日期值时遇到问题。

在我的C#代码中,我的日期定义为:

DateTime ed = DateTime.Now.AddMonths(+6);

在SQL Server中,date列定义为DateTime。日期已排序 以YYYY/MM/DD格式,没有时间。

当我尝试使用以下代码在数据库中插入值时:

t_a m = new t_a();
m.dbDate = DateTime.Today;
entity.AddTot_a(m);
entity.SaveChanges();

我收到以下错误消息:

  

将datetime2数据类型转换为日期时间数据类型   导致了超出范围的价值。

我认为这是因为该值显示为MM/DD/YYY: HH:MM:SS,而在数据库中它保存为YYY/DD/MM。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

SQL Server不以任何字符串格式存储DateTime - 它存储为8字节数值。所以字符串格式化不是问题。

另外:你一直在使用.NET DateTime - 就是这样做的方式,所以这个错误的原因必须是别的。

从错误消息

猜测,我想你可能会遇到这种情况:

  • 开发您的EF模型针对SQL Server 2008 (或2008 R2或2012)版本数据库

  • 正在运行您的应用程序针对SQL Server 2005 数据库

问题是:如果对2008(或更新)数据库使用EF建模工具,它将默认使用DATETIME2作为“日期”数据类型 - 但SQL Server 2005 没有该数据类型。

您需要做的是确保在构建应用程序之前,.edmx文件在Visual Studio中作为XML文件打开(在解决方案资源管理器中右键单击它,使用“打开方式...” 。“然后选择XML编辑器”,然后在EDMX文件中找到并修复此属性:

<Schema Namespace="MdsModel.Store" Alias="Self" Provider="System.Data.SqlClient" 
        ProviderManifestToken="2005" ....>
        ****************************

确保ProviderManifestToken设置为值2005

不幸的是,我还没有找到一个非常好的方法将它设置为任何地方的属性,你只需要在每次更改EDMX模型文件和构建应用程序之前检查它。

答案 1 :(得分:0)

由于某种原因,它不会让我添加评论(抱歉,仍然是这个网站的新内容)所以我发布这个答案:可以使用SqlDateTime数据类型作为你的选项吗? / p>