2014-12-17 3 views
2

У меня есть файл HBM, где я хочу поставить и выполнить необработанный SQL-запрос. Это то, что я положил в мой файл HBM:NHibernate <sql-query> в hbm - Не удалось выполнить запрос

<sql-query name="SqlSrcMyStuff" callable="true" > 
    <return-scalar column="RU_ID" type="System.Int32" /> 
    <![CDATA[ 
      select some_id 
      from some_table 
      where param1 = ? and param2 = ? 
    ]]> 
    </sql-query> 

Это мой код:

IList listOfRules = objMyDAO.GetByNamedQuery("SqlSrcMyStuff", arrParams); 

, но я получаю исключение «не может выполнить запрос». Но когда я беру запрос, он показывает в исключении и заменяет параметры и запускается против моей базы данных - запрос выполняется отлично.

Как я могу запустить этот сырой SQL-запрос?

ответ

1

НВМ должен быть

<sql-query name="SqlSrcMyStuff" callable="true" > 
    <return-scalar column="RU_ID" type="System.Int32" /> 
    <![CDATA[ 
      select some_col AS RU_ID 
      from some_table 
      where somecol1 = :param1 and somecol2 = :param2 
    ]]> 
</sql-query> 

И запрос

var result = session.GetNamedQuery("SqlSrcMyStuff") 
     .SetInt32("param1", 1) 
     .SetInt32("param2", 1) 
     .UniqueResult<int>(); 

Результат здесь Шоул быть просто ИНТ, не IList ... потому что это то, что мы говорим (скалярная как возвращение) Als проверить аналогичные Q&A

+0

Спасибо. Я сделал это, и теперь я получаю «ORA-00911 недопустимый символ», но когда я запускаю запрос в db, он запускается. есть идеи? – developer82

+0

Не так много опыта с оракулом, но это будет небольшая корректировка SQL-запросов ... Я думаю. Вышеприведенный ответ показывает полностью рабочее решение для Sql sever. [например,] (http://www.techonthenet.com/oracle/errors/ora00911.php) * PS: попробуйте отправить запрос без параметров, возможно, чтобы что-то работало. Но я бы просто догадался. Как я уже сказал, для SQL Server этот стандартный подход NHibernate работает ... * –

+1

нашел решение - в итоге появился номер с запятой в конце моего запроса sql – developer82