我有以下Oracle功能:可能使用Enterprise Library從.Net調用Oracle FUNCTION?
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)I發生要使用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爲十進制。 ---> System.InvalidCastException:對象必須實現IConvertible。 在System.Convert.ChangeType(對象值,類型conversionType,的IFormatProvider提供商) 在System.Data.OracleClient.OracleParameter.CoerceValue(對象值,元類型destinationType) ---內部異常堆棧跟蹤的結尾--- 在System.Data.OracleClient.OracleParameter.CoerceValue(對象值,MetaType目標類型) 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 behavior,Boolean needRowid,OciRowidDescriptor & rowidDescriptor,ArrayLis噸& resultParameterOrdinals) 在System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(布爾needRowid,OciRowidDescriptor & rowidDescriptor) 在System.Data.OracleClient.OracleCommand.ExecuteNonQuery() 在Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteNonQuery(在的DbCommand Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(的DbCommand命令)命令)