我在使用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
。我该如何解决这个问题?
答案 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>