Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SE CONNECTER A ACCESS ET RETOURNER DATESET


Information sur la source

Catégorie :Base de Donnees Source .NET ( DotNet ) Niveau : Débutant Date de création : 14/04/2005 Date de mise à jour : 30/04/2005 20:03:16 Vu : 10 970

Note :
2,5 / 10 - par 2 personnes
2,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

Permet de se connecter a une base de donnee access, de retourner un dataset ou un datareader. Ceci est une class
 

Source

  • Public Class Connection
  • Private MyConnection As OleDbConnection
  • Public Function OpenConnection(ByVal MyConn As OleDbConnection) As OleDbConnection
  • '///<summary>
  • 'Permet d'ouvrir la connection
  • '///</summary>
  • Dim MyDsConfig As New DataSet
  • MyConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Chemin_Base_De_Donnee
  • Try
  • MyConn.Open() 'ouverture de la connection
  • If MyConn.State = ConnectionState.Open Then
  • Return MyConn
  • End If
  • Catch ex As Exception 'probleme à l'ouverture de la connection, le probleme peut venir du chemin ConnectionString
  • MsgBox("Probléme d'ouverture de la connection" & vbCrLf & ex.Source & " " & ex.Message)
  • End Try
  • End Function
  • Public Function ClosedConnection(ByVal MyConn As OleDbConnection) As OleDbConnection
  • '///<summary>
  • 'Permet de fermer la connection
  • '///</summary>
  • If MyConn.State = ConnectionState.Open Then 'Si la connection est ouverte
  • Try
  • MyConn.Close() 'On ferme la connection
  • Catch ex As Exception 'Probleme lors de la fermeture de la connection
  • MsgBox("Probléme de fermeture de la connection" & vbCrLf & ex.Source & " " & ex.Message)
  • End Try
  • End If
  • End Function
  • Public Function RenvoieDS(ByVal Requete As String) As DataSet
  • '///<summary>
  • 'Permet de remplir un dataset grâce à une requete, sert pour les SELECT
  • '///</summary>
  • Try
  • MyConnection = New OleDbConnection 'Declaration d'une nouvelle connection
  • If Me.OpenConnection(MyConnection).State = ConnectionState.Open Then 'on verifie que la connection soit ouverte
  • Dim MyAdapter As New OleDbDataAdapter 'declaration d'un nouveau OledbDataAdapter
  • Dim MyDs As New DataSet 'declaration d'un dataset
  • MyAdapter.SelectCommand = New OleDbCommand(Requete, MyConnection) 'on passe le selectcommand dataadapter
  • MyAdapter.Fill(MyDs) 'on remplit le dataset
  • Me.ClosedConnection(MyConnection) 'on ferme la connection
  • Return MyDs 'on retourne le dataset
  • End If
  • Catch ex As Exception
  • MsgBox(ex.Message & " " & ex.Source)
  • End Try
  • End Function
  • Public Function Remplir_DataReader(ByVal Requete As String) As OleDbDataReader
  • '///<summary>
  • 'Permet de remplir un DataReader grâce à une requete, sert pour les SELECT
  • '///</summary>
  • Try
  • MyConnection = New OleDbConnection 'Declaration d'une nouvelle connection
  • If Me.OpenConnection(MyConnection).State = ConnectionState.Open Then 'on verifie que la connection soit ouverte
  • Dim myCommand As New OleDbCommand(Requete, MyConnection) 'Declaration du commande
  • Dim myReader As OleDbDataReader 'Declaration du datareader
  • myReader = myCommand.ExecuteReader() 'Liaison du datareader avec la commande
  • 'Me.ClosedConnection(MyConnection) 'on ferme la connection
  • Return myReader 'on retourne le datareader
  • End If
  • Catch ex As Exception
  • MsgBox(ex.Message & " " & ex.Source)
  • End Try
  • End Function
  • Public Function ExecuteRequete(ByVal Requete As String) As Integer
  • '///<summary>
  • 'sub permettant de faire un insert, update et delete
  • 'elle renvoie le nombre de ligne ce qui permet de savoir si ça s'est bien passé
  • '///</summary>
  • Try
  • Dim MyConnection As New OleDbConnection 'declaration d'une nouvelle connection
  • Dim MyOleCommand As OleDbCommand 'declaration d'une nouvelle commande
  • If Me.OpenConnection(MyConnection).State = ConnectionState.Open Then 'si la connection est ouverte
  • MyOleCommand = New OleDbCommand(Requete, MyConnection) 'je passe les parametres a ma command
  • Dim Resultat As Integer = MyOleCommand.ExecuteNonQuery() 'j'execute la requete
  • Me.ClosedConnection(MyConnection) 'je ferme la connection
  • Return Resultat
  • End If
  • Catch ex As Exception 'probleme d'execution de la requete
  • MsgBox(ex.Message & " " & ex.Source)
  • End Try
  • End Function
  • End Class
Public Class Connection


    Private MyConnection As OleDbConnection

    Public Function OpenConnection(ByVal MyConn As OleDbConnection) As OleDbConnection
        '///<summary>
        'Permet d'ouvrir la connection
        '///</summary>

        Dim MyDsConfig As New DataSet

        MyConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Chemin_Base_De_Donnee

        Try

            MyConn.Open()  'ouverture de la connection

            If MyConn.State = ConnectionState.Open Then
                Return MyConn
            End If

        Catch ex As Exception 'probleme à l'ouverture de la connection, le probleme peut venir du chemin ConnectionString
            MsgBox("Probléme d'ouverture de la connection" & vbCrLf & ex.Source & " " & ex.Message)
        End Try

    End Function

    Public Function ClosedConnection(ByVal MyConn As OleDbConnection) As OleDbConnection
        '///<summary>
        'Permet de fermer la connection
        '///</summary>

        If MyConn.State = ConnectionState.Open Then 'Si la connection est ouverte

            Try

                MyConn.Close()  'On ferme la connection

            Catch ex As Exception  'Probleme lors de la fermeture de la connection
                MsgBox("Probléme de fermeture de la connection" & vbCrLf & ex.Source & " " & ex.Message)
            End Try

        End If

    End Function

    Public Function RenvoieDS(ByVal Requete As String) As DataSet
        '///<summary>
        'Permet de remplir un dataset grâce à une requete, sert pour les SELECT
        '///</summary>

        Try

            MyConnection = New OleDbConnection 'Declaration d'une nouvelle connection

            If Me.OpenConnection(MyConnection).State = ConnectionState.Open Then 'on verifie que la connection soit ouverte

                Dim MyAdapter As New OleDbDataAdapter 'declaration d'un nouveau OledbDataAdapter
                Dim MyDs As New DataSet 'declaration d'un dataset
                MyAdapter.SelectCommand = New OleDbCommand(Requete, MyConnection) 'on passe le selectcommand dataadapter
                MyAdapter.Fill(MyDs) 'on remplit le dataset
                Me.ClosedConnection(MyConnection) 'on ferme la connection
                Return MyDs 'on retourne le dataset

            End If

        Catch ex As Exception
            MsgBox(ex.Message & " " & ex.Source)
        End Try

    End Function

    Public Function Remplir_DataReader(ByVal Requete As String) As OleDbDataReader
        '///<summary>
        'Permet de remplir un DataReader grâce à une requete, sert pour les SELECT
        '///</summary>

        Try

            MyConnection = New OleDbConnection 'Declaration d'une nouvelle connection

            If Me.OpenConnection(MyConnection).State = ConnectionState.Open Then 'on verifie que la connection soit ouverte

                Dim myCommand As New OleDbCommand(Requete, MyConnection) 'Declaration du commande
                Dim myReader As OleDbDataReader 'Declaration du datareader
                myReader = myCommand.ExecuteReader() 'Liaison du datareader avec la commande
                'Me.ClosedConnection(MyConnection) 'on ferme la connection
                Return myReader 'on retourne le datareader

            End If

        Catch ex As Exception
            MsgBox(ex.Message & " " & ex.Source)
        End Try

    End Function

    Public Function ExecuteRequete(ByVal Requete As String) As Integer
        '///<summary>
        'sub permettant de faire un insert, update et delete
        'elle renvoie le nombre de ligne ce qui permet de savoir si ça s'est bien passé
        '///</summary>

        Try

            Dim MyConnection As New OleDbConnection 'declaration d'une nouvelle connection
            Dim MyOleCommand As OleDbCommand 'declaration d'une nouvelle commande

            If Me.OpenConnection(MyConnection).State = ConnectionState.Open Then 'si la connection est ouverte

                MyOleCommand = New OleDbCommand(Requete, MyConnection) 'je passe les parametres a ma command
                Dim Resultat As Integer = MyOleCommand.ExecuteNonQuery() 'j'execute la requete
                Me.ClosedConnection(MyConnection) 'je ferme la connection

                Return Resultat

            End If

        Catch ex As Exception 'probleme d'execution de la requete
            MsgBox(ex.Message & " " & ex.Source)
        End Try

    End Function

End Class

Historique

30 avril 2005 20:03:16 :

Commentaires et avis

signaler à un administrateur
Commentaire de enysby le 18/04/2005 15:52:20

slt!!!cool la source mais jé un ptit pb avec une connexion sql server!
je suis deja connecter et je veux bien ajouter une nouvelle table mais avec le nom de la table pris d'un textbox et le pb est comment paramétré ma requete ,j'y suis bien arrivé à la creér mais avec un nom entré dans la requete!!
merci pr votre aide!

signaler à un administrateur
Commentaire de chris81 le 18/04/2005 18:21:19

ben tu peux faire ta requete du genre
"CREATE DATATABLE " & textbox1.text & " ...., mais le mieux pour sql server est l'utilisation de procedure stockée qui sont bcp plus rapide

signaler à un administrateur
Commentaire de Horfee le 21/04/2005 11:40:05

pourquoi ne pas surcharger les constructeurs et destructeurs et y implementant l'ouverture et la fermeture de la connection a la BD, plutot que d'ouvrir puis fermer a chaque fois une connection ?
--> Dim MyDsConfig As New DataSet : je n'ai pas trop compris a quoi ca servait dans la procedure openconnection

signaler à un administrateur
Commentaire de chris81 le 21/04/2005 17:39:16

a rien tu as raison :)

signaler à un administrateur
Commentaire de Benouille le 11/07/2005 10:59:41

moi j'aime pas bien ton code, j'aime pas ta méthode et j'aime pas non plus comment tu geres les erreurs.

le premier truc qui me choque dans ta classe, c'est que tu laisses sous entendre que c'est paramétrable sans passer de paramètres :
MyConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & Chemin_Base_De_Donnee
d'ou sort cette variable Chemin_Base_De_Donnee ?

ensuite le
If MyConn.State = ConnectionState.Open Then Return MyConn
ne sert a rien puisque tu viens de l'ouvrir une ligne au dessus. Et quand bien meme il servirait a quelque chose, dans l'autre cas rien n'est renvoyé.

pour la méthode il y a deux choses qui me déplaisent: d'une part tu ouvres la connection et tu la fermes a des endroits différents, d'autre part le msgbox ça pue: deja maintenant on est sensé utiliser messagebox.show mais surtout parceque tu as un msgbox dans ta classe externe ce qui veut dire que tu ne pourra plus gérer l'erreur dans ton programme appelant.



moi j'aurais fais un code du genre:

    Public Function OleDbConn(DataBase As String) As OleDbConnection
      dim Cnn as OleDbConnection = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & DataBase )
'vérifie la syntaxe, je l'ecris en direct
        return cnn
    End Function

c'est générique.
ensuite si tu veux aussi coder l'ouverture de la connection avec gestion de l'erreur automatique, tu rajoutes un evenement pour l'erreur (au passage Ex.tostring te donne toutes les infos, pas la peine de construire un msg), et une sub pour la conn:

public function openconn (maconn as oledbconnection)as ConnectionState
  try
    maconn.open
  catch ex as exeption
    RaiseEvent ErreurConnection (Ex.tostring)
  finally
  ' renvoie l'état de la connection dans tous les cas
    return maconn.state
  end try
end function

de manière plus globale je pense qu'externaliser ton acces au base est important mais qu'il ne faut pas se tromper sur qui fait quoi:
ta classe devrait être un module qui te fournit juste les parametres que tu ne veux pas réécrire sans cesse (comme la fonction oldbconn que j'ai écrit au dessus).
ensuite tes procédures métier appellent ce paramétrage et gerent l'erreur, en affichant par un message, cherchant a réouvrir la base ...


j'ai un module d'acces au donnée que j'utilise, il n'est certainement pas parfait mais corresponds a ce que je viens de dire, si tu veux je t'en fais un copié collé.

je mets 4 car l'idée de départ n'était pas mauvaise mais que la réalisation peche.

signaler à un administrateur
Commentaire de chris81 le 11/07/2005 15:59:33

oui merci des commentaires , je veux bien un copier coller de ton code.

signaler à un administrateur
Commentaire de Benouille le 12/07/2005 17:42:24

le code est tiré directement de mon projet pro, il est donc adapté à mes connections et pas tres "réexploitable".

je vais commenter succintement en préfixant de >>> pour que tu t'y retrouves, je mets juste la partie connection, histoire de pas poluer non plus.


Imports System.data.SqlClient
>>> c'est pour sqlserver

Module AccesAdo
>>> Tu remarques déja que c'est un module et non une classe (et puis vu que tu comptes pas en hériter, ni t'en resservir comme modele, ni faire une surcharge du new, le fait de prendre une classe était trop lourd à mon avis).

'Enum des bases
    Public Enum SqlBase
        Geo
        P_Compta
        Gestpat
        Gefag
    End Enum

>>> je suis amené a me connecter a plusieurs bases connues (la liste au dessus) + d'autres éventuellement (environ 1000 donc je vais pas les lister dans un enum), j'ai donc 2 méthodes d'appel, une par la liste et une libre.

#Region "Connections à Sprofina101"
    Public Function CnnSP101(Optional ByVal InitialCatalog As SqlBase = SqlBase.Gefag) As SqlConnection
    'établie une connection au Serveur SQL de Profina SProfina101 sur l'une des bases courantes
    Dim strConnectionString As String = "Data Source=SPROFINA101;" & _
                                        "Integrated Security=SSPI;"
        ' Choix de la base
        Select Case InitialCatalog
                Case SqlBase.Geo : strConnectionString &= "Initial Catalog=Geo-Ag"
                Case SqlBase.P_Compta : strConnectionString &= "Initial Catalog=P_Compta"
                Case SqlBase.Gestpat : strConnectionString &= "Initial Catalog=Copie de GestPat"
                Case SqlBase.Gefag : strConnectionString &= "Initial Catalog=GeFAG" 'base par defaut
                Case Else 'rajouter les nouvelles connections ici
                    Exit Function
        End Select

        ' renvoie la nouvelle connection
        Return New SqlConnection(strConnectionString)
    End Function

>>> cette fonction est ma fonction de base, sprofina101 est le nom de mon serveur, cela me renvoie une connection initialisée (si ça n'a pas planté bien sur)

    Public Function CnnSP101(ByVal InitialCatalog As String) As SqlConnection
    'surcharge de la classe précédente pour accéder a une base directement par son nom
    Dim strConnectionString As String = "timeout=0; Data Source=SPROFINA101;" & _
                                        "Integrated Security=SSPI;" & _
                                        "Initial Catalog=" & InitialCatalog
        Return New SqlConnection(strConnectionString)
    End Function

>>> cette fonction, surcharge de la première, me permet d'acceder a une base par son nom, c'est pour les bases que j'utilise occasionnelement et/ou qui sont trop nombreuses a lister
#End Region

#Region "Connections préformatées (raccourcis)"
>>> tout ce qui suit ne sert foncièrement a rien, mais me permet d'augmenter la lisibilité de mon code: je sais de suite sur quelle base de donnée du serveur je travaille. ça n'a aucun interet si tu n'utilises qu'une base.

    Public Function CnnGeo() As SqlConnection
        Return CnnSP101(SqlBase.Geo)
    End Function

    Public Function CnnP_Compta() As SqlConnection
        Return CnnSP101(SqlBase.P_Compta)
    End Function

    Public Function CnnGestPat() As SqlConnection
        Return CnnSP101(SqlBase.Gestpat)
    End Function

    Public Function CnnGeFAG() As SqlConnection
        Return CnnSP101(SqlBase.Gefag)
    End Function
>>> tu remarqueras qu'elle appellent toutes ma fonction de base
#End Region

#Region "outils"
    Public Function GetGrid(ByVal ProcedureStockee As String, ByVal BaseSql As SqlBase) As DataGrid
>>> apres j'ai quelques outils a la con, dont je me sers d'ailleurs jamais(ou rarement), qui me renvoie un dataset, un datagrid, qui executent une proc stockée ... sans que j'ai a me connecter au préalable
...

comme tu peux le voir, le code est tres simple et retourne toujours une connection (cette connection est en plus initialisée par un new, a voir si c'est bien ou non)



pour la gestion d'erreur, j'ai tendance a considérer que je vais toujours réussir a me connecter, donc je fais un test de connection au début et c'est tout

ensuite ce qui est important pour moi c'est de pas laisser trainer des connections, donc je faire comme suis:
dim maconn as connection = cnnXXX 'ou cnnXXX est la fonction qui me connecte a la base XXX sans me faire chier la bite

  maconn.open
  try
    executecommande 'fait le travail a faire etc
  catch
   'gestion éventuelle des erreurs sur mon travail en cours sur la connection ici
  finally
    maconn.close
  end try

ce genre de gestion d'erreur a un mérite: elle m'assure que la connection sera fermée si mes requetes ou autres ont plantées (mais par contre je ne teste pas la connection en elle meme comme je l'ai deja dit car j'ai tendance a savoir que ça va marcher, et si ça plante plus fort (arret intempestif du serveur ou autre), j'accuse le serveur et mon ego s'en sort tres bien).

pour conclure tu remarqueras que mes fonction n'ont pour but que de m'éviter l'ecriture de lignes toujours identiques et de me faciliter l' écriture/lecture du code.

voila j'espere avoir répondu au moins en partie a tes attentes

signaler à un administrateur
Commentaire de hicham1 le 25/02/2007 23:42:38

ou est le zip

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.