私は比較的新しいC#とOracleです。私は、Oracleのストアドプロシージャで、C#コードに値を返さないという問題があります。私は解決策を探して数日間過ごしました。ウェブ上でこのトピックに関するすべてを試してみました。そして私はまだこの仕事をすることができないので、私が得ることができるすべての助けに本当に感謝します。戻り値が格納されていないストアドプロシージャ
私は現在のコードを投稿しています(それぞれ、oracleストアドプロシージャとc#コード)。この現在のソリューションはエラーを返しませんが、ストアドプロシージャは結果を返さないという問題があります(C#コードの 'dr.HasRows'はfalseを返します)。私は(OUTパラメータなしで)私のストアドプロシージャをOracleでチェックしています。つまり、正しい値を返すはずです。また、プロシージャではなく、in-lay SQL文を使用すると、C#コードが正常に動作します。ここで
は私のOracleストアドプロシージャです:
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;
そしてここでは、私のC#のコードです:
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);
}
}
}
あなたのストアドプロシージャ自体は**任意の**行を返さないと、あなたのコードが出力パラメータを読み取ることはありません。 DataReaderは、クエリによって返された* rows *を読み取ります。出力パラメータを読みたい場合は、 'cmd.Parameters [" o_sco "]を使用します。値' –
プロシージャを使用する理由はありますか?あなたは単一の数字を返します - なぜ機能を使用しないのですか? –
@PanagiotisKanavosあなたの迅速な返答をありがとう。どのようにして私のコードを正確に置き換えるべきか、アドバイスしてください。私はかなり理解していない。私のストアドプロシージャは正しいですか?私のC#コードだけが修正が必要ですか?あるいは私は両方で間違っていますか?ありがとうございました。 – Flin