我试图使用拦截器为某些查询添加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无效的异常。为什么没有填写参数以及如何修复它? 提前致谢
答案 0 :(得分:0)
最后我明白了。我必须通过调用sql.GetParameterCount()获取参数的数量,然后用@ p0,@ p1,@ p2等替换所有问号。