cmd.Parameters.Add () ожидает объект, который является параметром (не значением параметра)
, так что это выполнимо, с несколькими оговорками, но вот тестовый пример:
установите бит Oracle:
create table testParam(aa number, bb varchar2(50) , cc date)
/
create or replace procedure testProcParam(
p_aa IN TESTPARAM.AA%TYPE , --usage of tableName.ColumnName%Type has this "scoped" to the table.column AA (here it is number)
p_BB IN TESTPARAM.BB%TYPE , --The usage of TYPE here has it defined as VARCHAR2
p_CC IN TESTPARAM.CC%TYPE --this is DATE
) is
BEGIN
INSERT INTO testParam (AA, BB, CC) VALUES(P_AA, P_BB, P_CC);
END testProcParam ;
/
теперь для бита .net:
OracleConnection con = Connect(constr);
// Set the command
OracleCommand cmd = new OracleCommand("testProcParam", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.BindByName = false; /*mark this false to bind by position*/
string AA = "123456" ;
OracleParameter oparamAA = new OracleParameter() ;
oparamAA.Value = AA;
cmd.Parameters.Add(oparamAA);
string BB = "abcdefghijklmnopqrst" ;
OracleParameter oparamBB = new OracleParameter() ;
oparamBB.Value = BB;
cmd.Parameters.Add(oparamBB);
string CC = "01-AUG-11" ; /*we rely on the nls date parameter to 'cast' this*/
OracleParameter oparamCC = new OracleParameter() ;
oparamCC.Value = CC;
cmd.Parameters.Add(oparamCC);
cmd.ExecuteNonQuery ();
con.Close();
con.Dispose();
Теперь стоит обратить внимание:
- Обратите внимание, как я создаю параметр и присваиваю ему значение "string" (http://download.oracle.com/docs/cd/B19306_01/win.102/b14307/OracleParameterClass.htm#i1011127 вы увидите, что конструкторы не имеют dbtype или вы должны явно указать это, это обходит это)
- если параметры не названы (т.е. вы полагаетесь на порядковый номер), вы должны "cmd.BindByName = false;"
- Для дат здесь вступает в силу формат NLS (таким образом, вы открываетеЕсли у вас возникли проблемы с обновлением даты и т. д.)
, тогда у вас будут данные:
SELECT * FROM testParam;
AA BB CC
---------------------- -------------------------------------------------- -------------------------
123456 abcdefghijklmnopqrst 01/08/11 00:00:00
/* --now to clean up
DROP procedure testProcParam ;
DROP table testParam ;
*/
РЕДАКТИРОВАТЬ
За ваш комментарий;в параметрах в PL / SQL при использовании
tableName.ColumnName% Type
вы на самом деле просто привязываете этот тип данных к типу данных столбца в таблице (этопозволяет изменить столбец, и он не нарушит пакет).
для примера, который я предоставил:
p_aa IN TESTPARAM.AA%TYPE ,
p_BB IN TESTPARAM.BB%TYPE ,
p_CC IN TESTPARAM.CC%TYPE
- это то же самое, что
p_aa IN NUMBER,
p_BB IN VARCHAR2 ,
p_CC IN DATE
Не уверен в «анонимном / родовом типе данных», который вы можете передать в