Calling OracleProcedure from VB.NET

148 Views Asked by At

Oracle procedure call from vb.net code is working fine if I use "Microsoft.Practices.EnterpriseLibrary.Data" dll. Rewriting same procedure call using "Oracle.ManagedDataAccess.dll" giving error. What am I doing wrong - Error message : ORA-06502: PL/SQL: numeric or value error: character string buffer too small

Code using- Microsoft.Practices.EnterpriseLibrary.Data:

Dim db As Database = GetDatabase("connection string")
Dim dbCommand As DbCommand
dbCommand = db.GetStoredProcCommand("procedurename")
db.AddInParameter(dbCommand, "piv_userid", DbType.String, strUserID)
db.AddInParameter(dbCommand, "piv_userpwd", DbType.String, strPassword)
db.AddInParameter(dbCommand, "piv_appstub", DbType.String, My.Application.Info.ProductName)
db.AddOutParameter(dbCommand, "pon_error_no", DbType.Decimal, 10)
db.AddOutParameter(dbCommand, "pov_error_msg", DbType.String, 400)
db.AddOutParameter(dbCommand, "pov_applist", DbType.String, 100)
db.ExecuteNonQuery(dbCommand)

code using - OracleManagedDataAccess.dll

Dim conn As New OracleConnection("connection string")
Dim cmd As New OracleCommand("procedurename", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("piv_userid", OracleDbType.Varchar2, ParameterDirection.Input).Value = strUserID
cmd.Parameters.Add("piv_userpwd", OracleDbType.Varchar2, ParameterDirection.Input).Value = strPassword
cmd.Parameters.Add("piv_appstub", OracleDbType.Varchar2, ParameterDirection.Input).Value = My.Application.Info.ProductName

cmd.Parameters.Add("pon_error_no", OracleDbType.Decimal, 10, ParameterDirection.Output)
cmd.Parameters.Add("pov_error_msg", OracleDbType.Varchar2, 400, ParameterDirection.Output)
cmd.Parameters.Add("pov_applist", OracleDbType.Varchar2, 100, ParameterDirection.Output)
cmd.ExecuteNonQuery()

Error message : ORA-06502: PL/SQL: numeric or value error: character string buffer too small

1

There are 1 best solutions below

0
Wernfried Domscheit On

For output parameter I always use this:

cmd.Parameters.Add("pon_error_no", OracleDbType.Decimal, 10,  ParameterDirection.Output)
cmd.Parameters("pon_error_no").DbType = DbType.Decimal

cmd.Parameters.Add("pov_error_msg", OracleDbType.Varchar2, 400, Nothing, ParameterDirection.Output)    
cmd.Parameters("pov_error_msg").DbType = DbType.String

cmd.Parameters.Add("pov_applist", OracleDbType.Varchar2, 100, Nothing, ParameterDirection.Output)
cmd.Parameters("pov_applist").DbType = DbType.String

cmd.ExecuteNonQuery()