estoy usando System.Data.OracleClient
que no por el nombre de enlace de parámetros y está verificando el CommandText y parámetros están sincronizados:ORA-01008 con todas las variables obligado
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) + ".");
}
}
Todavía una consulta tiros ORA-01008: not all variables bound
. Al insertar manualmente los valores de los parámetros en el texto de comando ofensivo, la consulta se ejecuta, por lo que los valores de CommandText y Parameters deberían estar bien. Estoy usando: como prefijo, tanto para variables como para nombres de parámetros, y funciona para otras consultas.
¿Cómo puedo identificar la causa de esta excepción?
¿tiene el código que hace las consultas? Además, ¿ha probado con los clientes de oráculo (u otros proveedores) .net? Creo que Microsoft ya no proporciona el cliente Oracle. –
Recuerdo vagamente un problema con uno de los clientes de Oracle de que los parámetros tenían que estar enlazados exactamente en el mismo orden en que aparecían en la consulta o no funcionaría, ¿podría ser ese el problema aquí? – Rup
@Nick - El comando era una actualización con ~ 40 parámetros, por lo que para legibilidad e ip-razones los descarté. Intenté con ODT.NET desde Oracle, pero tuve problemas para implementarlo. (Consulte también el comentario a continuación.) – Grastveit