0

ODP.NET 2 Day +開発者ガイドを読んでも役に立たなかったので、私たちはこれに本当に迷っています。関数定義(パッケージに格納されている)を提供しましたが、データセットを何にキャストする必要があるのか​​、関数を何に渡すのかがわかりません。関数の定義は次のとおりです。

FUNCTION ins (
rec_data IN OUT schema.table%ROWTYPE,
p_rowid OUT ROWID,
p_execution_ts IN schema.table.update_ts%TYPE)
RETURN NUMBER

これが私たちが行ったことです(これは何もしません):

// inserts data

public void insertData(DataSet Data) 
{ 
string connStr = "DATA SOURCE=someValidConnString"; 
OracleConnection conn = new OracleConnection(connStr); 
string rowID = String.Empty; 
Int32 rtnVal = 0; 
try 
{ 
conn.Open(); 
OracleCommand insCmd = new OracleCommand("PACKAGE.ins", conn); 
insCmd.CommandType = CommandType.StoredProcedure; 
OracleParameter outParam2 = new OracleParameter("retVal", OracleDbType.Varchar2,     rtnVal, 

ParameterDirection.ReturnValue); 
insCmd.Parameters.Add(outParam2); //return value 
OracleParameter inParam1 = new OracleParameter("rec_data", OracleDbType.NVarchar2,     dsACCTData.Tables

[0].Rows[0], ParameterDirection.InputOutput); 
OracleParameter outParam = new OracleParameter("p_rowid", OracleDbType.Varchar2, rowID, 

ParameterDirection.Output); 
OracleParameter inParam2 = new OracleParameter("p_execution_ts", OracleDbType.Date, 

Oracle.DataAccess.Types.OracleDate.GetSysDate(), ParameterDirection.Input); 
insCmd.Parameters.Add(inParam1);  //first in out parameter 
insCmd.Parameters.Add(outParam);  //second out parameter 
insCmd.Parameters.Add(inParam2);  //third in parameter 


insCmd.ExecuteNonQuery(); 
conn.Close(); 

} 
catch (OracleException ee) 
{ 
throw ee; 
} 
finally 
{ 
conn.Dispose(); 

} 
}

私はこれが非常に具体的な質問であることを知っていますが、私は本当に迷っています。Oracle関数insが機能すると仮定しましょう(機能します)。この場合、ODP.NETを使用して正しく呼び出す方法がわかりません。

助けてくれてありがとう。

編集:ここにエラーメッセージがあります:

ORA-06550:行1、列15:PLS-00306:'INS'の呼び出しで引数の数またはタイプが正しくありませんORA-06550:行1、列7:PL / SQL:文が無視されました

よろしく、フグ

4

2 に答える 2

1

たぶんこれが役立つかもしれません:

http://www.c-sharpcorner.com/UploadFile/john_charles/CallingOraclestoredproceduresfromMicrosoftdotNET06222007142805PM/CallingOraclestoredproceduresfromMicrosoftdotNET.aspx

私は同じ答えを探していて、何かを見つけたと思います。2行目に出力変数の例があります。

objCmd.Parameters.Add("pin_deptno", OracleType.Number).Value = 20;
objCmd.Parameters.Add("pout_count", OracleType.Number).Direction = ParameterDirection.Output;

リンクがうまくいくことを願っています。

よろしく、M

于 2011-01-25T13:46:57.163 に答える
1

すべてがよく見えます。ただし、すべての属性名と属性タイプを確認する必要があります。

あなたの例では、関数が Number を返すため (Oracle Function 定義で)、不適切なデータ型 OracleDbType.Varchar2 があります。

OracleParameter outParam2 = new OracleParameter("retVal", OracleDbType.Varchar2, rtnVal, ParameterDirection.ReturnValue);

insCmd.Parameters.Add(outParam2); //戻り値

于 2011-05-30T10:39:05.673 に答える