繁体   English   中英

NHibernate拦截器中未设置参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM