Programmation vb.net en ado.net

thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017 - 24 avril 2012 à 21:11
tri_yann Messages postés 124 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 19 septembre 2013 - 25 avril 2012 à 10:46
Bonjour, je me suis mis à vb.net il y a peu de temps et je réalise une insertion dans une base Access en Ado.net mais comme je pense (enfin j'espère il y a 2 façon).
J'ai réalisé les 2 façon est celle-ci marche mais le concept reste très flou, si quelqu'un pourrais m'expliqué plus clairement merci d'avance.

1ière façon
'Enregistrement de l'utilisateur dans la base
    Public Sub Ajouter(ByVal NewUser As USER)
        'Try
        Dim cnx As OleDb.OleDbConnection = Nothing
        Dim cmd As OleDb.OleDbCommand
        cnx = Open_connexion()
        cmd = New OleDb.OleDbCommand
        cmd.CommandType = CommandType.Text
        Dim sql As String = "INSERT INTO UTILISATEUR (identifiant, mdp, question, reponse) VALUES (@login, @password, @question, @reponse)"
        cmd.CommandText = sql
        cmd.Parameters.AddWithValue("@login", NewUser.Login)
        cmd.Parameters.AddWithValue("@password", NewUser.Password)
        cmd.Parameters.AddWithValue("@question", NewUser.Question)
        cmd.Parameters.AddWithValue("@reponse", NewUser.Reponse)
        cmd.Connection = cnx
        cmd.ExecuteNonQuery()
        'Catch ex As Exception
        'Throw New Exception("Erreur ajout utilisateur" & Environment.NewLine & ex.Message)
        'End Try
    End Sub


la 2ième façon (mode déconnecté, c'est flou pour moi)
Private AdaptUtilisateur As OleDbDataAdapter
    Private DtSet As New DataSet()

Private Sub init()
        Dim cnx As OleDb.OleDbConnection = Nothing
        Dim sql As String = "select * from UTILISATEUR"
        cnx = Open_connexion()
        AdaptUtilisateur = New OleDb.OleDbDataAdapter(sql, cnx)
        AdaptUtilisateur.Fill(DtSet, "UTILISATEUR")
        cnx = Close_connexion()
    End Sub

    Public Sub autre_ajout(ByVal NewUser As USER)
        Dim cnx As OleDb.OleDbConnection = Nothing
        init()
        Dim newline As DataRow
        newline = DtSet.Tables("UTILISATEUR").NewRow
        newline(0) = NewUser.Login
        newline(1) = NewUser.Password
        newline(2) = NewUser.Question
        newline(3) = NewUser.Reponse
        DtSet.Tables("UTILISATEUR").Rows.Add(newline)
        cnx = Open_connexion()
        Dim cmdBuild As OleDb.OleDbCommandBuilder
        cmdBuild = New OleDb.OleDbCommandBuilder(AdaptUtilisateur)
        AdaptUtilisateur.InsertCommand = cmdBuild.GetInsertCommand()
        AdaptUtilisateur.Update(DtSet, "UTILISATEUR")
        cnx = Close_connexion()
    End Sub

5 réponses

cs_gide_x Messages postés 37 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 20 mai 2016 1
24 avril 2012 à 21:30
Salut !

N'étant un expert ni en VB ni en base de données, la différence que je vois surtout c'est que dans la première méthode, ta ajoutes un utilisateur directement en base de donnée lors de l'appel de ExecuteNonQuery.... je dirais plutôt pratique si on a qu'un élément à ajouter à la fois...

La deuxième méthode utilise un Dataset; en gros, une base de donnée ou dans ton cas, plus modestement une table de la base en "variable".
Le principal avantage que je vois est que si tu dois ajouter plusieurs utilisateurs, tu peux les ajouter dans ton dataset sans être connecté à ta base de donnée (... d'où mode déconnecté) et tout envoyer d'un coups une fois que tu veux mettre à jour ta base.
Dans ton exemple concret, il me semble que cela ne sert à rien, vu qu'à chaque appel, tu te connectes et tu insert le nouvel enregistrement à ta base de donnée...


JD.
0
tri_yann Messages postés 124 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 19 septembre 2013 3
25 avril 2012 à 01:13
Bonjour,

Le 1er code est inclus dans le 2ème code. VB.net te créer automatiquement la commande insert avec la classe CommandBuilder. Il va analyser la structure de la table et si elle convient (clé primaire existante par ex) elle va créer une commande "Insert".

Les 2 codes sont donc valables. J'aurai une préférence pour la première qui sera plus rapide à compiler et tu maîtrises dans ton code ce que tu veux insérer exactement. Par contre, pour plus de rapidité, créée ton objet Cmd en global et crée la à l'ouverture du formulaire.


Dim Cmd as OleDb.OleDbCommand 

Private Sub Form_Load(...) 
        Dim cnx As OleDb.OleDbConnection = Nothing
        Dim cmd As OleDb.OleDbCommand
        cnx = Open_connexion()
        cmd = New OleDb.OleDbCommand
        cmd.CommandType = CommandType.Text
        Dim sql As String = "INSERT INTO UTILISATEUR (identifiant, mdp, question, reponse) VALUES (@login, @password, @question, @reponse)"
        cmd.CommandText = sql
        cmd.Parameters.Add("@login") 'ajouter options nature paramètre
        cmd.Parameters.Add("@password")
        cmd.Parameters.Add("@question")
        cmd.Parameters.Add("@reponse")
        cmd.Connection = cnx
End Sub

    Public Sub Ajouter(ByVal NewUser As USER)
        cmd.Parameters("@login").value =  NewUser.Login
        cmd.Parameters("@password").value = NewUser.Password
        cmd.Parameters("@question").value = NewUser.Question
        cmd.Parameters("@reponse").value = NewUser.Reponse
        cmd.ExecuteNonQuery()
    End Sub


Ainsi, la commande est compilée à l'ouverture du formulaire. Au moment des ajouts, il enregistre seulement les données puis exécute l'insert


Yann
0
tri_yann Messages postés 124 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 19 septembre 2013 3
25 avril 2012 à 01:15
Private Sub Form_Load(...) 
        Dim cnx As OleDb.OleDbConnection = Nothing
        cnx = Open_connexion()
        cmd = New OleDb.OleDbCommand
        cmd.CommandType = CommandType.Text
        Dim sql As String = "INSERT INTO UTILISATEUR (identifiant, mdp, question, reponse) VALUES (@login, @password, @question, @reponse)"
        cmd.CommandText = sql
        cmd.Parameters.Add("@login") 'ajouter options nature paramètre
        cmd.Parameters.Add("@password")
        cmd.Parameters.Add("@question")
        cmd.Parameters.Add("@reponse")
        cmd.Connection = cnx
End Sub



Yann
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
25 avril 2012 à 10:17
Merci pour vos explications j'y vois un peu plus claire maintenant et donc après avoir vu vos remarques j'ai décidé de garder la première façon tous en gardant sur mon ordi la 2ième (celle-ci peut servir un jour ou l'autre).

tri_yann je suis d'accord avec toi sur le fait de créer l'objet Cmd en global et crée la à l'ouverture du formulaire mais en faite je développe une application multi-couche donc j'ai un projet DAL divisé en 2 classe :
une pour la connexion à la base et
l'autre pour la classe Utilisateur (table dans ma base).

Donc je vais faire une fonction dans ma 1ière classe est qui pourra être appelé par toute les classe hérités avec en paramètre la requete à éxécuté. je sais pas si c'est très clair !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tri_yann Messages postés 124 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 19 septembre 2013 3
25 avril 2012 à 10:46
Bonjour crée la dans le "New" si tu veux. Mais évite de recréer la cmd à chaque insert. C'est tout.

Yann
0
Rejoignez-nous