Cette classe permet de se connecter à un serveur Oracle 8i/9i et d'y exécuter des requêtes (Actions ou avec resultset).
Pour ça, j'ai utilisé la référence system.Data.OracleClient qui fonctionne super bien.
Je l'ai testée avec un Serveur Oracle 8.17 et les temps de réponse sont exeptionnels.
Source / Exemple :
Public Class OracleAccess
#Region "Sous Classes"
Public Class ORAError
#Region "Variables"
Dim Nbr As Integer
Dim Desc As String
Dim Src As String
#End Region
#Region "Propriétés"
Public Property Number() As Integer
Get
Return Nbr
End Get
Set(ByVal Value As Integer)
Nbr = Value
End Set
End Property
Public Property Description() As String
Get
Return Desc
End Get
Set(ByVal Value As String)
Desc = Value
End Set
End Property
Public Property Source() As String
Get
Return Src
End Get
Set(ByVal Value As String)
Src = Value
End Set
End Property
#End Region
End Class
#End Region
#Region "Déclarations Locales"
Dim ORAConn As System.Data.OracleClient.OracleConnection
Dim ORACommand As OracleClient.OracleCommand
Dim ORAReader As OracleClient.OracleDataReader
Dim ORAServer As String
Dim ORAUser As String
Dim ORAPasswd As String
Dim libSQL As String
#End Region
#Region "Propriétés de Classe"
Public LastError As ORAError
Public Property Serveur() As String
Get
Return ORAServer
End Get
Set(ByVal Value As String)
ORAServer = Value
End Set
End Property
Public Property Utilisateur() As String
Get
Return ORAUser
End Get
Set(ByVal Value As String)
ORAUser = Value
End Set
End Property
Public Property MotDePasse() As String
Get
Return ORAPasswd
End Get
Set(ByVal Value As String)
ORAPasswd = Value
End Set
End Property
Public Property Connected() As Boolean
Get
Return (ORAConn.State = ConnectionState.Open)
End Get
Set(ByVal Value As Boolean)
If Value = True Then
Open()
Else
Close()
End If
End Set
End Property
Public Property SQL() As String
Get
Return libSQL
End Get
Set(ByVal Value As String)
libSQL = Value
End Set
End Property
#End Region
#Region "Fonctions Publiques"
Public Sub New()
'Initialisation des variables
ORAConn = New OracleClient.OracleConnection
ORACommand = New OracleClient.OracleCommand
ORAServer = ""
ORAUser = ""
ORAPasswd = ""
End Sub
Public Overloads Function Open(ByVal Serveur As String, ByVal Utilisateur As String, ByVal MotDePasse As String) As String
'Connexion à la base de données
'Sur erreur, partir à l'onglet "ErrOpen"
On Error GoTo ErrOpen
'Définition et initialisation de strCn
Dim strCn As String
strCn = ""
'Regarde si le paramètre Serveur n'est pas vide
If Serveur <> "" Then
'S'il existe, on défini les variables avec les paramètres
ORAServer = Serveur
ORAUser = Utilisateur
ORAPasswd = MotDePasse
'On défini la chaine de connexion
strCn &= "Data Source=" & Serveur & ";"
If Utilisateur <> "" Then strCn &= "User Id=" & Utilisateur & ";"
If MotDePasse <> "" Then strCn &= "Password=" & MotDePasse & ";"
ORAConn.ConnectionString = strCn
'Et on se connecte à la base de données
ORAConn.Open()
'Renvoie la valeur Booléenne Vrai
Return True
Else
Return False
End If
ErrOpen:
'En cas d'erreur, on défini l'historiquie d'erreur et on renvoie false
LastError.Number = Err.Number
LastError.Description = Err.Description
LastError.Source = Err.Source
Return False
End Function
Public Overloads Function open(ByVal serveur As String) As Boolean
'Fonction sans les paramètres utilisateur, on va les chercher
'dans les propriétés de la classe
Return open(serveur, ORAUser, ORAPasswd)
End Function
Public Overloads Function Open() As Boolean
'Fonction sans les paramètres serveur, on va les chercher
'dans les propriétés de la classe
Return Open(ORAServer, ORAUser, ORAPasswd)
End Function
Public Function Close() As Boolean
'Fermeture de la connexion
On Error GoTo ErrClose
ORAConn.Close()
Return True
ErrClose:
LastError.Number = Err.Number
LastError.Description = Err.Description
LastError.Source = Err.Source
Return False
End Function
Public Overloads Function ExecuteQuery(ByVal reqSQL As String, ByVal ResultTable As DataTable) As Boolean
'Execution de requête SQL avec Retour vers un DataTable
On Error GoTo ErrRecupData
Dim ORADataAdapt As New OracleClient.OracleDataAdapter(reqSQL, ORAConn)
ORADataAdapt.Fill(ResultTable)
Return True
ErrRecupData:
'En cas d'erreur, on quitte la fonction en retournant False
LastError.Number = Err.Number
LastError.Description = Err.Description
LastError.Source = Err.Source
Return False
End Function
Public Overloads Function ExecuteQuery(ByVal reqSQL As String, ByVal ResultSet(,) As String) As Boolean
'Adaptation pour remplir dans un tableau string(,)
On Error GoTo ErrRecupData
Dim Table As DataTable
Dim i, j As Integer
'Exécution de la fonction version DataTable
If ExecuteQuery(reqSQL, Table) Then 'Si la fonction renvoie True
'Redimentionnement du tableau string(,) pour s'adapter au contenu de la
'DataTable
ReDim ResultSet(Table.Columns.Count, Table.Rows.Count)
'Rempli le tableau string(,)
For i = 0 To (Table.Columns.Count - 1)
For j = 0 To (Table.Rows.Count - 1)
ResultSet(i, j) = CStr(Table.Rows(j).Item(i))
Next
Next
'Renvoie True
Return True
Else
Return False
End If
ErrRecupData:
LastError.Number = Err.Number
LastError.Description = Err.Description
LastError.Source = Err.Source
Return False
End Function
Public Overloads Function ExecuteQuery(ByVal ResultTable As DataTable) As Boolean
Return ExecuteQuery(libSQL, ResultTable)
End Function
Public Overloads Function ExecuteQuery(ByVal ResultSet(,) As String) As Boolean
Return ExecuteQuery(libSQL, ResultSet)
End Function
Public Overloads Function ExecuteQuery() As DataTable
Dim Table As New DataTable
ExecuteQuery(libSQL, Table)
Return Table
End Function
Public Overloads Function ExecuteNonQuery(ByVal reqSQL As String) As Integer
On Error GoTo ErrExecuteSQL
Dim i As Integer
'Initialisation de la commande
ORACommand.CommandText = reqSQL
ORACommand.CommandType = CommandType.Text
ORACommand.Connection = ORAConn
'Exécution
i = ORACommand.ExecuteNonQuery()
Return i
ErrExecuteSQL:
Return -1
End Function
#End Region
End Class
Conclusion :
Je n'ai fait que lancer des requêtes SQL de type Texte dans mes commandes Oracle car je n'avais besoin que de ça.
Cependant, vous pourrez aussi accéder directement à une table ou à une procédure stockée. Pour cela, il suffit de changer le CommandType.
Bon courage @ tous
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.