Ci sono non meno di 10 overload di OracleParameterCollection.Add
metodo. Sembra che tu abbia chiamato per sbaglio quello sbagliato.
Credo che quello che desideri sia Add(string, OracleDbType, int, object, ParameterDirection)
, nel qual caso ti manca solo un valore per l'object
parametro. Questo parametro dovrebbe contenere un valore iniziale per il parametro Oracle in uso. Nel tuo caso, tuttavia, il valore iniziale non ha importanza in quanto è un out
parametro. Aggiungi null
dopo 50
e la tua chiamata alla procedura memorizzata dovrebbe riuscire.
Quello che hai chiamato è Add(string, OracleDbType, object, ParameterDirection)
. La taglia 50
è stato interpretato come un valore iniziale per il parametro. Non sono sicuro di come interpretare l'errore restituito da Oracle ("errore numerico o di valore"), ciò implica per me che Oracle ha tentato di convertire una stringa in un numero e non è riuscito. Forse il valore 50
sovrascrive il tipo OracleDbType.Varchar2
e quindi Oracle si aspetta un numero anziché una stringa?
C'erano un altro paio di problemi che ho riscontrato:
- Dovrebbe
command.Parameters["SP_REQ_NUM"]
esserecommand.Parameters["SP_NUM"]
? - La tua procedura memorizzata non restituisce un numero; chiamando
Convert.ToInt32
su una stringa come201405 001
fallirà.