Dear members,
i'm using the following queries , they are very simple queries but i can't get them to work :(, and exceptions are thrown .
Query 1
string hql = "SELECT Cat.CatItems FROM Business.Category as Cat WHERE Cat.Id=" + CatID;
session.find(hql) ...
Exception
Quote:
Incorrect query syntax [SELECT Cat.idcategoryiditems FROM nhExhibition.Business.Category as Cat WHERE Cat.Id=5]
Parameter name: DBHandler - ERROR IN Getting Department Properties
Actual value was NHibernate.QueryException: Incorrect query syntax [SELECT Cat.idcategoryiditems FROM nhExhibition.Business.Category as Cat WHERE Cat.Id=5] ---> System.ArgumentException: Item has already been added. Key in dictionary: 'Cat' Key being added: 'Cat'
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at NHibernate.Hql.QueryTranslator.SetAliasName(String alias, String name)
at NHibernate.Hql.FromParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ClauseParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.PreprocessingParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ParserHelper.Parse(IParser p, String text, String seperators, QueryTranslator q)
at NHibernate.Hql.QueryTranslator.Compile()
--- End of inner exception stack trace ---
at NHibernate.Hql.QueryTranslator.Compile()
at NHibernate.Hql.QueryTranslator.Compile(ISessionFactoryImplementor factory, IDictionary replacements, Boolean scalar)
at NHibernate.Impl.SessionFactoryImpl.GetQuery(String queryString, Boolean shallow)
at NHibernate.Impl.SessionImpl.GetQueries(String query, Boolean scalar)
at NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters)
at NHibernate.Impl.QueryImpl.List()
at nhExhibition.DataAccess.ExhibitionDBMgr.SELECT_PROPERTIES(String hql) in C:\Documents and Settings\Jawad\Desktop\Monday 30 October 2006\Exhibition - DataTutorial\Exhibition\project\Exhibition 03\nhExhibition.DataAccess\ExhibitionDBMgr.cs:line 701.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentOutOfRangeException: Incorrect query syntax [SELECT Cat.idcategoryiditems FROM nhExhibition.Business.Category as Cat WHERE Cat.Id=5]
Parameter name: DBHandler - ERROR IN Getting Department Properties
Actual value was NHibernate.QueryException: Incorrect query syntax [SELECT Cat.idcategoryiditems FROM nhExhibition.Business.Category as Cat WHERE Cat.Id=5] ---> System.ArgumentException: Item has already been added. Key in dictionary: 'Cat' Key being added: 'Cat'
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at NHibernate.Hql.QueryTranslator.SetAliasName(String alias, String name)
at NHibernate.Hql.FromParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ClauseParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.PreprocessingParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ParserHelper.Parse(IParser p, String text, String seperators, QueryTranslator q)
at NHibernate.Hql.QueryTranslator.Compile()
--- End of inner exception stack trace ---
at NHibernate.Hql.QueryTranslator.Compile()
at NHibernate.Hql.QueryTranslator.Compile(ISessionFactoryImplementor factory, IDictionary replacements, Boolean scalar)
at NHibernate.Impl.SessionFactoryImpl.GetQuery(String queryString, Boolean shallow)
at NHibernate.Impl.SessionImpl.GetQueries(String query, Boolean scalar)
at NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters)
at NHibernate.Impl.QueryImpl.List()
at nhExhibition.DataAccess.ExhibitionDBMgr.SELECT_PROPERTIES(String hql) in C:\Documents and Settings\Jawad\Desktop\Monday 30 October 2006\Exhibition - DataTutorial\Exhibition\project\Exhibition 03\nhExhibition.DataAccess\ExhibitionDBMgr.cs:line 701.
What if i want to get Cat.CatItems.Id, Cat.CatItems.Name ... using the same query ?
Query 2string hql = "SELECT Cat.idcategoryiditems FROM nhExhibition.Business.Category as Cat WHERE Cat.Id=" + CatID;
int retrievedNumber = 0;
object myInstance=null;
myInstance = m_session.CreateQuery(hql).UniqueResult();
tx.Commit();
if (myInstance != null)
retrievedNumber = Convert.ToInt16(myInstance);
ExceptionQuote:
Incorrect query syntax [SELECT myCat.cathasparent.Id FROM nhExhibition.Business.Category as myCat WHERE myCat.Cat='Electronic Devices' or upper('Electronic Devices') or lower('Electronic Devices')]
Parameter name: DBHandler - ERROR IN Checking Category Name
Actual value was NHibernate.QueryException: Incorrect query syntax [SELECT myCat.cathasparent.Id FROM nhExhibition.Business.Category as myCat WHERE myCat.Cat='Electronic Devices' or upper('Electronic Devices') or lower('Electronic Devices')] ---> System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at NHibernate.Hql.WhereParser.CloseExpression(QueryTranslator q, String lcToken)
at NHibernate.Hql.WhereParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ClauseParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.PreprocessingParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ParserHelper.Parse(IParser p, String text, String seperators, QueryTranslator q)
at NHibernate.Hql.QueryTranslator.Compile()
--- End of inner exception stack trace ---
at NHibernate.Hql.QueryTranslator.Compile()
at NHibernate.Hql.QueryTranslator.Compile(ISessionFactoryImplementor factory, IDictionary replacements, Boolean scalar)
at NHibernate.Impl.SessionFactoryImpl.GetQuery(String queryString, Boolean shallow)
at NHibernate.Impl.SessionImpl.GetQueries(String query, Boolean scalar)
at NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters)
at NHibernate.Impl.QueryImpl.List()
at NHibernate.Impl.AbstractQueryImpl.UniqueResult()
at nhExhibition.DataAccess.ExhibitionDBMgr.SELECT_CHECK(String hql) in C:\Documents and Settings\Jawad\Desktop\Monday 30 October 2006\Exhibition - DataTutorial\Exhibition\project\Exhibition 03\nhExhibition.DataAccess\ExhibitionDBMgr.cs:line 718.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentOutOfRangeException: Incorrect query syntax [SELECT myCat.cathasparent.Id FROM nhExhibition.Business.Category as myCat WHERE myCat.Cat='Electronic Devices' or upper('Electronic Devices') or lower('Electronic Devices')]
Parameter name: DBHandler - ERROR IN Checking Category Name
Actual value was NHibernate.QueryException: Incorrect query syntax [SELECT myCat.cathasparent.Id FROM nhExhibition.Business.Category as myCat WHERE myCat.Cat='Electronic Devices' or upper('Electronic Devices') or lower('Electronic Devices')] ---> System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item(Int32 index)
at NHibernate.Hql.WhereParser.CloseExpression(QueryTranslator q, String lcToken)
at NHibernate.Hql.WhereParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ClauseParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.PreprocessingParser.Token(String token, QueryTranslator q)
at NHibernate.Hql.ParserHelper.Parse(IParser p, String text, String seperators, QueryTranslator q)
at NHibernate.Hql.QueryTranslator.Compile()
--- End of inner exception stack trace ---
at NHibernate.Hql.QueryTranslator.Compile()
at NHibernate.Hql.QueryTranslator.Compile(ISessionFactoryImplementor factory, IDictionary replacements, Boolean scalar)
at NHibernate.Impl.SessionFactoryImpl.GetQuery(String queryString, Boolean shallow)
at NHibernate.Impl.SessionImpl.GetQueries(String query, Boolean scalar)
at NHibernate.Impl.SessionImpl.Find(String query, QueryParameters parameters)
at NHibernate.Impl.QueryImpl.List()
at NHibernate.Impl.AbstractQueryImpl.UniqueResult()
at nhExhibition.DataAccess.ExhibitionDBMgr.SELECT_CHECK(String hql) in C:\Documents and Settings\Jawad\Desktop\Monday 30 October 2006\Exhibition - DataTutorial\Exhibition\project\Exhibition 03\nhExhibition.DataAccess\ExhibitionDBMgr.cs:line 718.
My purpose in
Query 2 is to get the CategoryId of a specific Category(based on its Name), i'm getting one Category Id if the Cat exists .. that's why i used m_session.CreateQuery(hql).UniqueResult();
By the way, does anyone know how can i retrieve the last id inserted in a class(table) using a separate query ?
Regards,
JojoRico