2011-11-01 60 views
1

我遇到了一个问题,试图从MySql数据库请求数据。Nhibernate MySql DateTime问题c#

例如: 我有一个表user_data,其中包含很多字段,包括字符串user_id和日期date。在尝试使用手动创建的SQL查询请求数据时:

SELECT * FROM `alt_database`.`user_data` 
where user_id = '54sdfjghwegFDqwgf' and day = '2011-10-31'; 

它检索一切正常。但在试图申请使用NHibernate相同的数据:

string customer_id = "54sdfjghwegFDqwgf"; 
DateTime DT = DateTime.Parse("2011-10-31"); 
var criteria = TheSession.CreateCriteria(typeof(user_data)); 
criteria.Add(Restrictions.Eq("user_id", customer_id) & Restrictions.Eq("Day", day)) 
     .List<user_data>(); 

它检索0的记录。

任何帮助,将不胜感激。

在此先感谢。

德米特里

+0

我强烈建议使用[NHProf](http://nhprof.com/)来帮助使用NHibernate调试项目。它提供了许多附加信息来帮助您发现问题。 –

+0

如果包含类映射,它会有所帮助。 –

回答

0

感谢所有试图帮助我的人!

不幸的是,我不得不使用原始的sql查询:使用CreateSQLQuery,然后为每个字段添加标量。

0

我认为标准部分是不完全正确的。还有一天没有定义。你有DT定义。

string customer_id = "54sdfjghwegFDqwgf"; 
DateTime day = DateTime.Parse("2011-10-31"); 
var criteria = TheSession.CreateCriteria(typeof(user_data)) 
    .Add(Restrictions.Eq("user_id", customer_id)) 
    .Add(Restrictions.Eq("Day", day)) 
    .List<user_data>(); 
+0

不幸的是,这段代码检索到相同的结果 - 0次匹配。最有趣的事情:如果我将日期更改为2010-10-13,它将检索预期的点击次数。 =) –

+0

它只是一个午夜的日期? 2010-10-31 00:00:00听起来好像它可能是@Sly建议的 –

+0

将生成的SQL记录到日志文件或控制台以便您可以看到它输出的查询也是一个好主意 –

0

这是因为NHibernate把时间放在查询中。你可以这样做:

criteria.Add(Restrictions.Between("Day", day, day.AddDays(1).AddSeconds(-1)));