2017-12-07 27 views
0

인터셉터를 사용하여 일부 쿼리에 WITH (NO LOCK)을 추가하려고합니다. 모든 쿼리가 아니라 ReadUncommitted가 선택 사항이 아닙니다. 코드는 다음과 같습니다매개 변수가 NHibernate 인터셉터 내부에 설정되어 있지 않습니다.

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)); 

를 자, 내가이 WHERE 절에 절에서 일부 양식을 각 별칭 (NO LOCK)

문제는 최종 SQL의 매개 변수가 모든 것을,이다 "를 추가하려면 ? " SQL이 유효하지 않은 예외가 발생합니다. 왜 매개 변수가 채워지지 않고 어떻게 고쳐야합니까? 미리 감사드립니다.

답변

0

마침내 얻었습니다. sql.GetParameterCount()를 호출하여 매개 변수 수를 얻은 다음 모든 물음표를 @ p0, @ p1, @ p2 등으로 바꿔야했습니다.

관련 문제