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 new OracleParameter(":myParam", obj.MyParam).

InformationsquelleAutor Grastveit | 2011-04-15

Schreibe einen Kommentar