名前でパラメーターバインディングを行う whichを使用System.Data.OracleClient
しており、 CommandText とパラメーターが同期していることを確認しています。
public string CommandText { get; set; }
public IEnumerable<OracleParameter> Parameters { get; set; }
private void VerifyThatAllParametersAreBound()
{
var variableNames = Regex.Matches(CommandText, ":\\w+")
.Cast<Match>().Select(m => m.Value).ToArray();
var parameteterNames = Parameters.Select(p => p.ParameterName).ToArray();
var unboundVariables = variableNames.Except(parameteterNames).ToArray();
if (unboundVariables.Length > 0)
{
throw new Exception("Variable in CommandText missing parameter: "
+ string.Join(", ", unboundVariables) + ".");
}
var unboundParameters = parameteterNames.Except(variableNames).ToArray();
if (unboundParameters.Length > 0)
{
throw new Exception("Parameter that is not used in CommandText: "
+ string.Join(", ", unboundParameters) + ".");
}
}
まだ 1 つのクエリがスローされORA-01008: not all variables bound
ます。パラメーター値を問題のある CommandText に手動で挿入すると、クエリが実行されるため、CommandText とパラメーター値は問題ないはずです。私は : を変数とパラメーター名の両方のプレフィックスとして使用しており、他のクエリでも機能しています。
この例外の原因を特定するにはどうすればよいですか?