2015-09-07 2 views
0

ESTE ES EL PROCEDIMIENTO EN LA BASE DE DATOS.PLS-00306: неправильное количество или типы аргументов при вызове C#

(Перевод с помощью Google Translate: это процедура в базе данных.)

create or replace procedure sp_validarusuario(v_name IN varchar2, v_clave IN varchar2, v_validacion OUT varchar2) 
IS 
BEGIN 
Select 'OK' into v_validacion from usuario where password = v_clave and nombre = v_name; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
    v_validacion := 'NOOK'; 
END sp_validarusuario; 
/

ERROR EN C# AL MOMENTO DE EJECUTAR EL SP.

(Перевод на Google Translate: C# Ошибка в момент выполнения SP)

Imagen Error en C#

+2

Как насчет английского языка? – 5208760

ответ

1

В вашем использовании # код C это:

cmd.Parameters.add("v_validacion",OracleDbType.varchar2).Direction=ParameterDirection.Output 

Вместо этого:

cmd.Parameters.add("v_validacion",OracleDbType.varchar2).Direction=ParameterDirection.ReturnValue 

ссылка на ParameterDirection Enumeration MSDN

+0

Описание MSDN немного вводит в заблуждение в контексте Oracle. У вас не может быть параметра * return * для хранимой процедуры. В Oracle только функции имеют (один) возвращаемый параметр. – Codo

+0

@Codo: вы правы, что процедуры не могут иметь значение RETURN; однако, ваш вывод о том, что процедуры не могут иметь параметры «OUT», неверен. Процедуры могут иметь столько параметров «OUT», сколько вы хотите объявить, при условии ограничения 65536 параметров на/из любой процедуры, курсора или функции. Большая проблема, которую я вижу в приведенном выше примере, заключается в том, что перечисление, о котором идет речь, это 'ParameterDirection', а не' ParametreDirection' (хотя ссылка на документацию написана правильно). –

+0

Я не подразумевал ничего относительно параметров * out *. – Codo