Tuesday, July 08, 2008

support Oracle RefCursor in system.data.common

Imports System.Reflection
Imports System.Reflection.Assembly
Friend Class OracleClient
Private Shared OraAssembly As Assembly

Public Shared Function CreateRefCursorParameter(ByVal ParameterName As String) As Object
If OraAssembly Is Nothing Then
'Always check the assebmly from application BIN folder, if does not exist, load failed
OraAssembly = Assembly.Load("Oracle.DataAccess")
If OraAssembly Is Nothing Then
Throw New Exception("Oracle.DataAccess.DLL is not found in the application folder")
Else
Trace.WriteToTraceLog("Runtime Loaded Assembly:" & OraAssembly.FullName & vbCrLf & "From:" & OraAssembly.Location, TraceLevel.Verbose)
End If
End If
Dim OracleDbType As Type = OraAssembly.GetType("Oracle.DataAccess.Client.OracleDbType")
Dim Fieldinfo As FieldInfo = OracleDbType.GetField("RefCursor")
Dim OracleParameter As Type = OraAssembly.GetType("Oracle.DataAccess.Client.OracleParameter")

Dim m As ConstructorInfo = OracleParameter.GetConstructor(New Type() {GetType(System.String), OracleDbType, GetType(System.Data.ParameterDirection)})
If m IsNot Nothing Then
' call the method to create parameter
Return m.Invoke(New Object() {ParameterName, Fieldinfo.GetValue(Nothing), ParameterDirection.Output})
Else
Throw New Exception("Error creating OracleParameter -RefCursor")
End If
End Function

End Class

Blog Archive