ORA-01008 mit allen Variablen gebunden
Ich bin mit System.Data.OracleClient
die nicht parameter-Bindung von Namen und überprüfen, dass die CommandText-und Parameter sind in sync:
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) + ".");
}
}
Immer noch eine Abfrage wirft ORA-01008: not all variables bound
. Wenn Sie manuell einfügen die parameter-Werte in die beleidigen die CommandText-Abfrage ausgeführt, so dass die CommandText-und Parameter-Werte sollten ok sein. Ich bin mit : als Präfix sowohl für Variablen und parameternames und es funktioniert für die anderen Abfragen.
Wie kann ich lokalisieren, die Ursache für diese Ausnahme?
haben Sie den code, der die Abfragen? Auch haben Sie versucht, mit dem oracle (oder anderen Anbietern) .net clients? Ich denke, dass Microsoft nicht mehr die Bereitstellung der oracle-client.
Ich erinnere mich vage ein Problem mit einem Oracle-clients, die Parameter hatte, gebunden zu sein, in genau der gleichen Reihenfolge, wie Sie erschienen in der Abfrage oder es nicht funktionieren würde - könnte sein, dass das problem hier?
Der Befehl war ein update mit ~40 Parameter für die Lesbarkeit und die ip-Gründe, warum ich ließ Sie fallen. Ich habe versucht, mit ODT.NET von Oracle, hatte aber Mühe der Bereitstellung. (Siehe auch Kommentar unten.)
Ich meinte ODP.NET. Ich werde versuchen es jetzt wieder, dass es vielleicht einen praktischen Grund, es zu benutzen. Da der Fehler-code wird von Oracle ich denke, alle Parameter werden übertragen, aber vielleicht hat es etwas zu tun mit Datentypen? Ich erstelle Parameter wie dieses
Ich erinnere mich vage ein Problem mit einem Oracle-clients, die Parameter hatte, gebunden zu sein, in genau der gleichen Reihenfolge, wie Sie erschienen in der Abfrage oder es nicht funktionieren würde - könnte sein, dass das problem hier?
Der Befehl war ein update mit ~40 Parameter für die Lesbarkeit und die ip-Gründe, warum ich ließ Sie fallen. Ich habe versucht, mit ODT.NET von Oracle, hatte aber Mühe der Bereitstellung. (Siehe auch Kommentar unten.)
Ich meinte ODP.NET. Ich werde versuchen es jetzt wieder, dass es vielleicht einen praktischen Grund, es zu benutzen. Da der Fehler-code wird von Oracle ich denke, alle Parameter werden übertragen, aber vielleicht hat es etwas zu tun mit Datentypen? Ich erstelle Parameter wie dieses
new OracleParameter(":myParam", obj.MyParam)
.InformationsquelleAutor Grastveit | 2011-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wurde der Fehler nicht definieren DBNull.Wert für null-Werte. So
musste preplaced mit
Ich glaube, es war die Arbeit früher mit ODT.NET ohne null-Prüfungen, aber habe es noch nicht bestätigt. Offenbar
System.Data.OracleClient
sinkt Parameter mit null-Wert.InformationsquelleAutor Grastveit
Wenn Sie pass null als parameter den Wert, Sie bekommen "Nicht alle Variablen gebunden", Wenn Sie pass DBNull.Wert erhalten Sie Laufzeit-Fehler irgendwo in den OracleClient. Übergeben NULL ist, verwenden Sie string.Leer, OracleClient wandelt es in NULL für jeden Datenbank-Typ.
InformationsquelleAutor Yaro
Ich glaube, Microsoft hat veraltet OracleClient-als Teil der ADO.NET vor etwa 2 Jahren.
Möchten Sie vielleicht zu prüfen, mit Oracle data access components (ODAC odp.net). Einfach zu bauen-up (und überprüfen zählt) der Parameter mit Hilfe OracleParameter Klasse. Setup und install docs gefunden hier. Oh, Sie kann sich in Ihre Entity framework (und LINQ) - Unterstützung auch (immer noch beta, denke ich?).
Etwas ernsthaft in Erwägung ziehen sowieso.
InformationsquelleAutor tbone