Как вызвать функцию Oracle для вставки данных с использованием ODP.NET и набора данных? (конкретный пример) - PullRequest
0 голосов
/ 14 января 2011

Мы действительно заблудились, прочитав руководство для разработчиков 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 работает (работает), в этом случае мы просто не знаем, как правильно ее вызвать, используя ODP.NET

Большое спасибо за любую помощь.

edit:Вот сообщение об ошибке:

ORA-06550: строка 1, столбец 15: PLS-00306: неправильный номер или типы аргументов при вызове 'INS' ORA-06550: строка 1, столбец 7: PL /SQL: оператор игнорируется

С уважением, Fugu

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Каждая вещь выглядит хорошо.Но вы должны проверить все имена и типы атрибутов.

В вашем примере есть неверный тип данных OracleDbType.Varchar2, потому что ваша функция возвращает Number (в вашем определении функции Oracle)

OracleParameter outParam2 = новый OracleParameter ("retVal", OracleDbType.Varchar2, rtnVal, ParameterDirection.ReturnValue);

insCmd.Parameters.Add (outParam2);// возвращаемое значение

1 голос
/ 25 января 2011

может быть, это может помочь:

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

Я ищу тот же ответ и думаю, что нашел что-то. Во второй строке приведен пример выходной переменной.

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

Надеюсь, что ссылка пойдет на пользу.

С уважением, M

...