0

1 または 0 を返すストアド プロシージャがあります。この値は、それを呼び出す .net 関数に戻す必要があります。Oracle からデータ セットを取得する方法 (refCursor を使用)、Oracle にデータを入力する方法、cmd.ExecuteNonQuery() を呼び出す方法を知っています (ストアド プロシージャを使用してデータを入力すると仮定) しかし、ストアド プロシージャの単一の戻り値を取得するにはどうすればよいでしょうか。私はデータセットを返すのではなく、1 または 0 を返します。したがって、これは少し異なります。

ありがとう。

更新: CODE TO より具体的にどこが間違っているかを示しますか?

try
{
      using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ACODBConnectionString3"].ConnectionString))
      {
                using (OracleCommand cmd = new OracleCommand(sProc,conn))
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    OracleParameter inputParm = new OracleParameter("HospitalFinIn", OracleDbType.Varchar2);
                    inputParm.Value = HosFin;
                    //inputParm3.Value = Double.Parse(isActive);
                    OracleParameter outRefParam = new OracleParameter("cur_out", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
                    //outRefParam.
                    cmd.Parameters.Add(inputParm);
                    cmd.Parameters.Add(outRefParam);
                    outcome = (int)cmd.ExecuteScalar();
                    if (outcome == 1) 
                        FinUniq = false;
                    else if (outcome == 0) 
                        FinUniq = true;
                    else 
                        FinUniq = true;
                    //outcome = cmd.ExecuteNonQuery();
                    //adapter = new OracleDataAdapter(cmd);
                    //adapter.Fill(ds);
                }
            }
        }

これは、これを実行したときに発生する例外です

Specified cast is not valid.

何が間違っているのかわかりません。ストアド プロシージャは確実に 0 または 1 を返します。

4

1 に答える 1

2

に似たものを使用して、OUT REFCURSOR を介してスカラー値を返していますOPEN curInt FOR select 42 from dualか?

「OracleCommand.ExecuteScalar()」を使用してストアド プロシージャを実行するだけで、スカラー値を取得できます。OUT refcursor の OracleParameter を作成し、方向を「ParameterDirection.Output」に設定し、「OracleDbType」プロパティを「OracleDbType.RefCursor」に設定することを忘れないでください。

于 2012-02-15T14:18:54.310 に答える