Переписать метод для предотвращения SQL-инъекций NHibernate - PullRequest
0 голосов
/ 22 октября 2019

Мне нужно переписать этот метод для использования параметризованных запросов в NHibernate:

static public int GetDomainId(string domainName)
    {
        string hql = string.Format("select domain.{0} from {2} domain where {1}='{3}'", RO_ID, DOM_NM, "DOMAIN", domainName);
        using (NHibernate.ISession session = NHibernate.NHibernateHelper.GetCurrentSession())
        {
            NHibernate.IQuery query = session.CreateQuery(hql);
            IList<int> ids = query.List<int>();
            if (ids.Count == 1)
            {
                return ids[0];
            }
        }
        return 0;
    }

Я обновил метод, чтобы использовать следующие параметры:

static public int GetDomainRoId1(string domainName)
    {
        string hql = "select domain.:param1 from DOMAIN domain where :param2=:param3";
        using (NHibernate.ISession session = NHibernate.NHibernateHelper.GetCurrentSession())
        {
            NHibernate.IQuery query = session.CreateSQLQuery(hql)
                .SetParameter("param1", DOM_RO_ID)
                .SetParameter("param2", DOM_DOM_NM)
                .SetString("param3", domainName)
                .ExecuteUpdate();

            IList<int> ids = query.List<int>();
            if (ids.Count == 1)
            {
                return ids[0];
            }
        }
        return 0;
    }

Но это бросаетошибка в коде: «Не удается неявно преобразовать тип int в« NHibernate.IQuery »»

Может кто-нибудь помочь мне исправить это? Но также укажите мне руководство, чтобы лучше понять, как работает NHibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...