ممكن للاتصال أوراكل وظيفة من صافي باستخدام مكتبة المؤسسة؟

StackOverflow https://stackoverflow.com/questions/411820

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي وظيفة 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 (بسبب قضية أخرى كنت أعاني) ولكن الحل إما يكون على ما يرام.

وأنا أحاول أن نطلق على هذا من VB.Net باستخدام مكتبة الشركة MS مثل ذلك:

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 (قيمة كائن، نوع نوع التحويل، مزود IFormatProvider)    في System.Data.OracleClient.OracleParameter.CoerceValue (قيمة كائن، MetaType destinationType)    --- نهاية الاستثناء الداخلي تتبع مكدس ---    في System.Data.OracleClient.OracleParameter.CoerceValue (قيمة كائن، MetaType destinationType)    في System.Data.OracleClient.OracleParameter.SetCoercedValueInternal (قيمة كائن، MetaType metaType)    في System.Data.OracleClient.OracleParameterBinding.PrepareForBind (اتصال OracleConnection، Int32 والإزاحة)    في System.Data.OracleClient.OracleCommand.Execute (OciStatementHandle statementHandle، والسلوك CommandBehavior، منطقية needRowid، OciRowidDescriptor وrowidDescriptor، ArrayList و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)

هل كانت مفيدة؟

المحلول

حسنا، يبدو أن هذا العمل:

Public Function GetNextJobNumber() As Object
    Dim db As Database = DatabaseFactory.CreateDatabase()
    Using cmd As DbCommand = db.GetStoredProcCommand("CORPHIER_PKG.get_job_no")
        db.AddParameter(cmd, "retval", DbType.Int32, 0, ParameterDirection.ReturnValue, True, 0, 0, String.Empty, DataRowVersion.Current, Convert.DBNull)
        db.ExecuteNonQuery(cmd)
        Return db.GetParameterValue(cmd, "retval")
    End Using
End Function
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top