NHibernate拦截器中没有设置参数

时间:2017-12-07 11:52:08

标签: c# nhibernate interceptor

我试图使用拦截器为某些查询添加WITH(NO LOCK)(不是所有查询,因此ReadUncommitted不是一个选择)。 代码如下所示:

var rawSql = sql.ToString();
if (!rawSql.Contains(IQueryOverExtensions.QueryHintNoLockString))
    return sql;

var noWhere = rawSql.Substring(0, rawSql.IndexOf(WhereKeyword, StringComparison.InvariantCulture));
var from = noWhere.Substring(noWhere.IndexOf(FromKeyword, StringComparison.InvariantCulture));
var fromWithNoLock = from.Replace("_ ", $"_ {WithNoLock} ");

var sqlWithNoLock = rawSql.Replace(from, fromWithNoLock);

return base.OnPrepareStatement(new SqlString(sqlWithNoLock));

这里,我从FROM子句到WHERE子句以及每个别名添加WITH(NO LOCK)

问题是,最终的SQL参数都是"?"抛出SQL无效的异常。为什么没有填写参数以及如何修复它? 提前致谢

1 个答案:

答案 0 :(得分:0)

最后我明白了。我必须通过调用sql.GetParameterCount()获取参数的数量,然后用@ p0,@ p1,@ p2等替换所有问号。