sexta-feira, 20 de janeiro de 2012

Recursos não suportados pelo NHibernate.JetDriver

1.    ROUND(valor_decimal, numero_de_casas_decimais)
select g.Type, ROUND(AVG(i.Cost), 2)
from Guitar g, Inventory i
where g.Id = i.TypeId
       group by g.Type
2.    Cláusula DISTINCT, usada para retornar resultados únicos de acordo com uma determinada coluna.
select g.Type, COUNT(DISTINCT i.Model)
from Guitar g, Inventory i
where g.Id = i.TypeId
      group by g.Type
3.    Multiquery – Recurso do NHibernate é possível executar duas ou mais queries por meio de apenas um acesso ao banco de dados.
IQuery query = Session.CreateQuery(hqlQuery)
.SetMaxResults(MaxResult)
.SetFirstResult(FirstResult);

IQuery count = Session.CreateQuery(“select count(*) from Inventory”);

IMultiQuery mQuery = Session.CreateMultiQuery()
.Add(“result”, query)
.Add<long>(“RowCount”, count);

resultSet = (IList)mQuery.GetResult(“result”);
                int totalCount = (int)((IList<long>)mQuery.GetResult(“RowCount”)).Single();

terça-feira, 17 de janeiro de 2012

Obtendo o driver de conexão do NHibernate ao Access 2010


Para o acesso ao Microsoft Access 2010 utilizando o nhibernate utiliza-se o driver NHibernate.JetDriver.

O código fonte deste driver está disponível em  https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.JetDriver e pode ser baixado utilizando o Tortoise SVN.
Para criar a DLL NHibernate.JetDriver é necessário compilar o projeto. Após compilado, a DLL poderá ser encontrada em ...\src\NHibernate.JetDriver\bin\Debug
Antes de compilar a DLL, alguns fatos devem ser levados em conta.
1.    O NHibernate.JetDriver.dll utiliza funcionalidades de NHibernate.dll. Para que não haja conflito de versões, é importante que antes de compilar o driver, referencie-se a NHibernate.dll da mesma versão que é utilizada no projeto que você está desenvolvendo. A instalação obteve sucesso utilizando-se a versão 2.1.2.4000 do NHibernate. Na data dos testes, não foi possível compilar o driver utilizando a versão 3.0.xxx do NHibernate pois o NHibernate.JetDriver utilizava funcionalidade não mais existente nesta versão do NHibernate.
2.    Após compilado o projeto NHibernate.JetDriver, basta referenciar a DLL NHibernate.JetDriver.dll em seu projeto. Referenciar também:
a.    Antlr3.Runtime.dll
b.    Iesi.Collections.dll
c.    Log4net.dll
d.    NHibernate.dll
3.    Estas DLLs estão disponíveis na versão 2.1.2.4000 do hibernate.

FAQ
1.    “Invalid index 0 for this OleDbParameterCollection with Count=0.”
Suspeita-se que este problema aconteça por causa de alguma versão velha do driver JetDriver. Para resolvê-lo, recomenda-se recompilar o driver seguindo os passos indicados em Obtendo o driver de conexão do NHibernate ao Access 2010.

Referencias Utilizadas:
http://dixond.blogspot.com/2010/08/nhibernate-and-ms-access-its-simple-but.html
Versão 2.1.2 do NHibernate:
http://ufpr.dl.sourceforge.net/project/nhibernate/NHibernate/2.1.2GA/NHibernate-2.1.2.GA-bin.zip