2017-12-07 18 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句にFROM句一部の形をとると、各エイリアスは(NO LOCK)

問題は、最終的なSQLのパラメータがすべてあること、である「WITH追加します? " SQLが無効であるという例外がスローされます。なぜパラメータが記入されず、それを修正するのか? ありがとうございます

答えて

0

最後に私はそれを得ました。 sql.GetParameterCount()を呼び出してパラメータの数を取得してから、すべての疑問符を@ p0、@ p1、@ p2などに置き換えなければなりませんでした。

関連する問題