[英]Parameters are not set inside 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无效的异常。 为什么不填写参数以及如何解决? 提前致谢
终于我明白了。 我必须通过调用sql.GetParameterCount()来获取参数数量,然后用@ p0,@ p1,@ p2等替换所有问号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.