我有以下 Oracle 功能:
function get_job_no return number is
V_job_no number;
begin
select appwork.tlm_corphier_job.nextval into V_job_no from dual;
return V_job_no;
end get_job_no;
请注意:
1)这是一个函数,而不是一个过程
2)这是返回一个数字,而不是一个 VARCHAR
3)我碰巧使用的是 System.Data.OracleClient 而不是 Oracle.DataAccess.Client (由于另一个问题我是有)但是任何一个解决方案都可以。
我正在尝试使用 MS 企业库从 VB.Net 调用它,如下所示:
Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Data.OracleClient
Public Function GetNextJobNumber() As Object
Dim db As Database = DatabaseFactory.CreateDatabase()
Dim myresult As Object = Nothing
Using cmd As DbCommand = db.GetStoredProcCommand("CORPHIER_PKG.get_job_no")
Dim retval As New Data.OracleClient.OracleParameter("retval", GetType(System.Data.OracleClient.OracleNumber))
retval.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(retval)
db.ExecuteNonQuery(cmd)
myresult = retval.Value
End Using
Return myresult
End Function
我收到以下错误:
System.InvalidCastException:无法将参数值从 RuntimeType 转换为 Decimal。---> System.InvalidCastException:对象必须实现 IConvertible。在 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.Data.OracleClient.OracleParameter.CoerceValue(Object value, MetaType destinationType) --- 内部异常堆栈跟踪结束 --- 在 System.Data。 OracleClient.OracleParameter.CoerceValue(Object value, MetaType destinationType) at System.Data.OracleClient.OracleParameter.SetCoercedValueInternal(Object value, MetaType metaType) at System.Data.OracleClient.OracleParameterBinding.PrepareForBind(OracleConnection connection, Int32& offset) at System.Data .OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior 行为, Boolean needRowid,