Wie gehen boolean parameter Oracle-Prozedur C#
Problem habe ich übergeben boolean-parameter, um meine Vorgehensweise in Oracle. Ich bekomme Fehler
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'LOG_ENTRY'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored"
Prozedur in Oracle:
log_entry(p_rqserial in integer,
p_orig in varchar,
p_type in char,
p_objname in varchar,
p_info in varchar,
p_text in varchar, p_with_commit boolean)
Dies ist mein code :
cmd = new Oracle.DataAccess.Client.OracleCommand("Vbank_pkg.vb_log_entry", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_rqserial", OracleDbType.Int32).Value = Log_Serial;
cmd.Parameters.Add("p_orig", OracleDbType.Varchar2).Value = "\'" + p_orig + "\'";
cmd.Parameters.Add("p_type", OracleDbType.Char).Value = "\'" + p_type + "\'";
cmd.Parameters.Add("p_objname", OracleDbType.Varchar2).Value = "\'" + p_objname + "\'";
cmd.Parameters.Add("p_info", OracleDbType.Varchar2).Value = "\'" + p_info + "\'";
cmd.Parameters.Add("p_text", OracleDbType.Varchar2).Value = "\'" + p_text + "\'";
cmd.Parameters.Add("p_with_commit", OracleDbType.Char).Value =true;
cmd.ExecuteNonQuery();//Here error
Tun Sie wissen, wie zu tun? Weil ich finde keine Lösung und viele Leute sagen, es ist inpossible zu übergeben bool-parameter von C# auf Oracle-aber ich kann nicht glauben, dass es keine Möglichkeit gibt.
Entfernen Sie die Anführungszeichen, das ist einer der Hauptvorteile für die Verwendung von vorbereiteten Anweisungen und bind-Parameter.
InformationsquelleAutor Vova Potapov | 2015-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit
BindByName
Eigenschaft vonOracleCommand
alstrue
zu zwingen, die Daten-provider binden diese Parameter durch den Namen und nicht nur für den index. Sie nicht brauchen, um passieren die'
als Parameter. Es ist führen mit Parametern in derado.net
.ODP.NET unterstützt keine booleschen Datentyp. Verwenden Sie einfach
1
oder0
alschar
Wert beibehalten.Zum Beispiel:
Aber ich immer noch sehr gerne eine andere Lösung finden.
Ja, ich Stimme mit Ihnen überein, aber leider ODP.NET nicht unterstützt Typ bool, so müssen Sie 1 oder 0.
Wenn ich versuche über
OracleDbType.Char
, bekomme ich die folgende Fehlermeldung:"ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'REGISTER'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored" System.Exception {Oracle.ManagedDataAccess.Client.OracleException}
. Kann ich vermeiden, diese in meiner eigenen gespeicherten Prozeduren, aber ich kann nicht umhin, diese mit Oracle built-in gespeicherten Prozeduren, ohne die Schaffung von "Wrappern" zu übersetzen. Was ist seltsam, dass es funktionierte für mich mit ODP.NET bis ich nur ein Upgrade von 12c1 aktuellen version 12c2.Diese Lösung scheint nicht zu funktionieren in Oracle.ManagedDataAccess v 12.1. Hat jemand herausgefunden, wie man diese Arbeit zu machen? Ich sehe mit gridtrak erwähnt, es funktioniert, aber jetzt funktioniert es nicht mehr.
InformationsquelleAutor Felipe Oriani