nhibernate: выбор статической строки из БД (Oracle) через NamedParameter или PositionalParameter - PullRequest
0 голосов
/ 03 июня 2011

Чтобы проверить, что наша база данных oracle даст нам, когда мы добавим ее в Unicode, мы используем простой прием: выбор строки из двойного.Это запускает кодирование базы данных над строкой.

select 'Let’s Go' from dual

Теперь я хочу реализовать то же самое с помощью NHibernate.Просто делая это:

string.Format("select '{0}' from dual", text);

оставляет мой код ломким и открытым для SQL-инъекций, поэтому я бы предпочел сделать одно из следующего:

//Version 1 : Named param
IQuery q = this.Session.CreateSQLQuery( "SELECT :staticstring from dual");
q.SetString(":staticstring", text);

// Version 2 : positional param
IQuery q = this.Session.CreateSQLQuery( "SELECT ? from dual");
q.SetString(0, text);

Оба вышеперечисленных способа дают сбойпараметр не может быть назначен.Я думал, что это было проблемой с размещением параметров где-нибудь перед предложением 'from', но это сработало, когда я попытался без NH.Кстати, я пробовал использовать Oracle9 и диалект 10. 10.

Есть ли другой способ безопасно выбрать статическую строку из базы данных оракула с помощью NHibernate 2.1?Флориан предложил QueryOver, но это новое в версии 3.0 ...

РЕШЕНИЕ (Основано на материалах Флориана и Фила):

DetachedCriteria crit = DetachedCriteria.For<Freetext>()
                           .SetProjection(Projections.Cast(NHibernateUtil.String,Projections.Constant(text)))
                           .SetMaxResults( 1 );
        string dbString = crit.GetExecutableCriteria( this.Session ).List < object >()[0].ToString();

1 Ответ

4 голосов
/ 04 июня 2011

Это может быть немного излишним, но это делает работу:

string text = "Let's go";
var result = session.QueryOver<SomeTable>()
    .Select(Projections.Cast(NHibernateUtil.String, Projections.Constant(text)))
    .Take(1)
    .List<object>();

string s = result[0] as string;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...