Ich bin relativ neu in beiden, C# und Oracle. Ich habe ein Problem mit der gespeicherten Oracle-Prozedur, die keinen Wert an meinen C# -Code zurückgibt. Ich habe mehrere Tage nach einer Lösung gesucht und alles versucht, was ich zu diesem Thema im Internet finden konnte. Und ich kann es immer noch nicht schaffen, also würde ich jede Hilfe, die ich bekommen kann, sehr schätzen.Gespeicherte Prozedur gibt keinen Wert zurück
Ich poste aktuellen Code Ich habe (Orakel gespeicherte Prozedur und C# -Code, jeweils). Diese aktuelle Lösung gibt keinen Fehler zurück, aber das Problem besteht darin, dass die gespeicherte Prozedur kein Ergebnis zurückgibt ("dr.HasRows" in meinem C# -Code gibt false zurück). Ich habe meine gespeicherte Prozedur auf Oracle überprüft (ohne OUT-Parameter) und es funktioniert wie es sollte, dh es gibt den richtigen Wert zurück. Außerdem funktioniert mein C# -Code gut, wenn ich eine In-Laie-SQL-Anweisung anstelle einer Prozedur verwende.
Hier ist meine Oracle gespeicherte Prozedur:
CREATE OR REPLACE PROCEDURE P_TIP_PODJETJA
(
tip in number,
o_sco out number
)
AS
sco number;
BEGIN
select score into sco
from sco_sif_score a
where a.sif_kat = 3
and a.tip_pod = tip;
o_sco:= sco;
END P_TIP_PODJETJA;
Und hier ist mein C# -Code:
using (OracleCommand cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandText = "P_TIP_PODJETJA";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("tip", Podjetje.TipSub));
cmd.Parameters.Add(new OracleParameter("o_sco", OracleDbType.Decimal, ParameterDirection.Output));
cmd.BindByName = true;
using (OracleDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
dr.Read();
Score.ScoTipPodjetja = dr.GetDecimal(0);
}
}
}
Ihre gespeicherte Prozedur selbst liefert keine ** ** Zeilen und Ihr Code nicht liest die Ausgangsparameter. Ein DataReader liest die von der Abfrage zurückgegebenen * Zeilen *. Wenn Sie den Ausgabeparameter lesen möchten, verwenden Sie 'cmd.Parameters [" o_sco "]. Wert' –
Gibt es einen Grund, warum Sie eine Prozedur verwenden? Sie geben eine einzelne Zahl zurück - warum nicht eine FUNCTION? –
@ PanagiotisKanavos Danke für Ihre schnelle Antwort. Könnten Sie bitte mitteilen, wie und wo genau ich meinen Code ersetzen soll? Ich verstehe das nicht ganz. Ist meine gespeicherte Prozedur korrekt? Und nur mein C# -Code muss korrigiert werden? Oder liege ich falsch in beiden? Vielen Dank. – Flin