在使用NHibernate进行保存的时候,Session.Flush()的时间出现了SalDataTime溢出, 望高手指教,谢谢了

数据库中有两个字段是时间类型,在实体的构造函数中都已经赋予了System.DateTime.Now 初始值,但是保存的时候还是出现SqlDateTime溢出

我刚碰到这个问题,是因为数据库的datetime类型默认值是0001-00-00,而sqldatetime的值必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间,所以就溢出了。
处理办法有很多:
(1)修改.hbm.xml文件中的类型,该"DateTime"为"String",该实体文件中的属性类型"DateTime"为"String"。
处理的时候,该属性值要么为空,要么是具有正确日期格式的字符串。
该方法只适合DateTime类型,而对int,bool类型就不适应了。下面就看第二种方法。
(2)Nullables处理
(1)添加引用:Nullables.dll与Nullables.NHibernate.dll
(2)修改配置文件.hbm.xml对应的类型,如:
<property name="InDate" column="inDate" type="DateTime"/>修改为:
<property name="InDate" column="inDate" type="Nullables.NHibernate.NullableDateTimeType,Nullables.NHibernate"/>
(3)修改实体类文件,如:
private DateTime _inDate;
/// <summary>
/// 添加日期
/// </summary>
public DateTime InDate
{
get { return _inDate; }
set { _inDate = value;
} 修改为:
private Nullables.NullableDateTime _InDate;
/// <summary>
/// 添加日期
/// </summary>
[NHibernate.Mapping.Attributes.Property]
public Nullables.NullableDateTime InDate
{
get { return _InDate; }
set { _InDate = value; }
}
(4)给属性InDate赋值:
Item clsItem = new Item();
clsItem.InDate = new NullableDateTime(System.DateTime.Now);
如果要输入空值,如:clsItem.InDate = nulll;

(5)获取属性InDate的值:
ItemCRUD clsCRUD = new ItemCRUD(); //对实体类的操作
Item clsItem = clsCRUD.ItemDetails(id); //获取实体类
this.txtInDate.Text = clsItem.InDate.ToString();

有一些都没有试验过,按道理应该是都可以实现的,你选择一个适合自己的办法试试吧!我刚刚从java转做.net有空可以多交流。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-26
是什么数据库?Oracle的话可以用sysdate追问

使用的是Sql server 数据库

追答

打印一下System.DateTime.Now 是多长 不行的话进行一下格式化

本回答被网友采纳
第2个回答  2011-05-06
用NHibernate 的时间类型的属性必须得给它赋值 不能是空的

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答