IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[ADO.NET] questions à propos du mode déconnecté


Sujet :

Accès aux données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Par défaut [ADO.NET] questions à propos du mode déconnecté
    Salut,

    voila je suis un débutant dans l'ado.net et j'ai pas mal de questions dans le mode déconnecté, un 1000 merci d'avance d'avoir pris le temps de lire mes questions et de me répondre si possible, je vous serais reconnaissant à vie et ça m'aidera énormement

    ----------------------------

    "supposons que j'ai créé une bdd sous acces (bd1.mdb) et que j'ai l'ai ajouté dans mon projet comme source de données, qui lui la transforme en 3 fichiers : xss, xsd, xsc et transfert le fichier bd1.mdb dans mon répertoire bin"

    1- c'est quoi la difference entre current et original ?
    la version current est celle qui s'affiche lorsque on démarre l'application, et l'original celle qui est stockée ? ou current est celle qui est stockée, et l'original est celle de l'acces ? j'arrive plus à comprendre ...

    2-peut on modifier/ajouter/supprimer une fois pour toute dans notre bdd?
    dans mon application vb.net j'ai fait cette commande :

    -madataadapter.deletecommand = new oledbcommand("delete from table1", connection")
    -Dim cmdb As New oledbCommandBuilder(da)
    -madataadapter.update(datasetbd1.table1)


    normalement ça devra vider ma table, mais ça ne marche pas rien n'est changé, et j'ai remarqué que parfois avec d'autres commandes du genre insertcommande ça marche je vois les nouvelles enregistrements dans ma datagrid (attaché à la table), mais lorsque je modifie le code et je lance l'application les enregistrements sont perdues et j'ai les données initiales (ceux de l'acces), comment ça se fait ? comment faire pour appliquer une insertion ou modification une fois pour toute
    dans ma bdd meme si on modifie le code et on relance l'application ?

    3-déclarations des DataAdapters et différences
    est ce qu'il est conseillé de créér un objet dataAdapter pour chaque table ou seulement un seul qu'on l'utilisera à chaque fois ? ex

    -da.SelectCommand = New oledbCommand("select * from table1 ", con) -da.Fill(ds.table1)
    -da.SelectCommand = New oledbCommand("select * from table2 ", con) -da.Fill(ds.table2)
    ...... supposons qu'on fait des modifs ........
    -da.update(ds.table1)


    c'est quoi la difference entre cette déclaration

    Dim darecet As New DataSet1TableAdapters.recetteTableAdapter


    et celle ci

    Dim darecet As New DataSet1

    la 2eme est mieux non ?

    -------------------------


    voila, et comme j'ai dis 1000 merci d'avoir pris le temps de me lire et de me répondre

    bonne nuit

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Aie aie aie
    Tu t'emmêles complètement les pinceaux...

    Je vais essayer de répondre, mais commence par jeter un oeil à ces tutoriels :
    http://dotnet.developpez.com/articles/ado1/
    http://dotnet.developpez.com/articles/ado2/

    Ca concerne SQL Server, mais en fait le principe est strictement le même, tu dois juste remplacer Sql* par OleDb*

    Citation Envoyé par 007007 Voir le message
    1- c'est quoi la difference entre current et original ?
    la version current est celle qui s'affiche lorsque on démarre l'application, et l'original celle qui est stockée ? ou current est celle qui est stockée, et l'original est celle de l'acces ? j'arrive plus à comprendre ...
    Un DataSet est une copie en mémoire de tout ou partie de ta base de données. Il garde la trace des modifications faites en mémoire, de façon à pouvoir les reporter sur la "vraie" base de données. La version "current" est celle sur laquelle tu travailles, avec les modifications que tu as faites. La version "originale" est une "sauvegarde" des données en mémoire avant que tu ne les modifies.

    Citation Envoyé par 007007 Voir le message
    2-peut on modifier/ajouter/supprimer une fois pour toute dans notre bdd?
    dans mon application vb.net j'ai fait cette commande :

    -madataadapter.deletecommand = new oledbcommand("delete from table1", connection")
    -Dim cmdb As New oledbCommandBuilder(da)
    -madataadapter.update(datasetbd1.table1)


    normalement ça devra vider ma table
    Non, normalement ça ne doit rien faire du tout
    Un DataAdapter remplit un DataSet à partir de la base de données en utilisant la SelectCommand fournie, et applique à la base de données les modifications qui ont été faites dans le DataSet, en utilisant UpdateCommand, InsertCommand, et DeleteCommand. S'il n'y a aucune modification dans le DataSet, dataAdapter.Update ne fait rien...

    Citation Envoyé par 007007 Voir le message
    3-déclarations des DataAdapters et différences
    est ce qu'il est conseillé de créér un objet dataAdapter pour chaque table ou seulement un seul qu'on l'utilisera à chaque fois ? ex

    -da.SelectCommand = New oledbCommand("select * from table1 ", con) -da.Fill(ds.table1)
    -da.SelectCommand = New oledbCommand("select * from table2 ", con) -da.Fill(ds.table2)
    ...... supposons qu'on fait des modifs ........
    -da.update(ds.table1)


    c'est quoi la difference entre cette déclaration

    Dim darecet As New DataSet1TableAdapters.recetteTableAdapter


    et celle ci

    Dim darecet As New DataSet1

    la 2eme est mieux non ?
    Il n'y en a pas une mieux que l'autre, elles n'ont rien à voir...
    Dans la première, tu déclares un DataAdapter typé (généré par le designer de dataset). Dans la 2e tu déclares un DataSet.

    Normalement le DataAdapter généré automatiquement contient déjà les commandes SQL nécessaires pour remplir le DataSet et mettre à jour la base, tu n'as pas besoin de les écrire toi-même.


    Pour plus de détails, regarde les tutos que je t'ai indiqués, parce que pour l'instant tu as vraiment les idées embrouillées

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Par défaut
    merci tomlev, trés sympa de ta part de m'aider

    "Il garde la trace des modifications faites en mémoire, de façon à pouvoir les reporter sur la "vraie" base de données. "

    et comment on fait pour les reporter sur la vraie bdd ?

    dans le 2eme lien que tu m'as donné, dans le dernier exemple je n'ai pas compris un truc, ils ont fait un insertcommand .... aprés row(x)=valeur ... et à la fin commandbuilder et update, c'est quoi l'utilité de insertcommand ? les modifications dans les rows suffit non ? j'ai supprimé l'insertcommand du code et ça marche nikel ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     ' Exemple d'utilisation d'un DataSet en mise à jour
    Imports System.Data.SqlClient
    Imports System.Data
    Imports System.IO
     
    Namespace ExempleAdoNetCSharp
        '/ Description résumée de SqlDataSet.
        Public Class SqlDataSet
            Public Shared Sub Main()
                Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" + "Initial Catalog=Northwind"
                Dim strRequete As String = "SELECT * FROM Categories ORDER BY CategoryID"
                Try
                    Dim oConnection As New SqlConnection(strConnexion)
                    oConnection.Open()
     
                    ' Chargement de la liste des catégories dans oDataSet
                    Dim oSqlDataAdapter As New SqlDataAdapter(strRequete, oConnection)
     
                    Dim oDataSet As New DataSet("Categories")
                    oSqlDataAdapter.Fill(oDataSet, "Categories")
     
                    ' Affichage du contenu de oDataSet avant insertion de données
                    Console.WriteLine(" *** Liste des catégories avant la mise à jour *** ")
     
                    Dim i As Integer
                    For i = 0 To (oDataSet.Tables("Categories").Rows.Count) - 1
                        Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oDataSet.Tables("Categories").Rows(i)(0).ToString(), oDataSet.Tables("Categories").Rows(i)(1).ToString())
                    Next i
                    Console.WriteLine(ControlChars.Lf)
     
                    ' Remplissage de la commande InsetCommand
                    oSqlDataAdapter.InsertCommand = New SqlCommand("INSERT INTO Categories(CategoryName, Description, Picture) Values(@CategoryName,@Description,@Picture)", oConnection)
                    oSqlDataAdapter.InsertCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName")
                    oSqlDataAdapter.InsertCommand.Parameters.Add("@Description", SqlDbType.NText, 16, "Description")
                    oSqlDataAdapter.InsertCommand.Parameters.Add("@Picture", SqlDbType.Image, 16, "Picture")
     
                    Dim oDataRow As DataRow
                    Dim byteArray As Byte () = {&H0, &H0}
     
                    oDataRow = oDataSet.Tables("Categories").NewRow()
                    oDataRow("CategoryName") = "Wine"
                    oDataRow("Description") = "French Wine"
                    oDataRow("Picture") = byteArray
     
                    oDataSet.Tables("Categories").Rows.Add(oDataRow)
     
                    ' Mise à jour de la source de données à partir du DataSet
                    oSqlDataAdapter.Update(oDataSet, "Categories")
     
                    ' Rechargement des données de la source mise à jour
                    oDataSet.Clear()
                    oSqlDataAdapter.Fill(oDataSet, "Categories")
     
                    ' Affichage du contenu de oDataSet après insertion d'une ligne de données
                    Console.WriteLine(" *** Liste des catégories après la mise à jour *** ")
                    Dim i As Integer
                    For i = 0 To (oDataSet.Tables("Categories").Rows.Count) - 1
                        Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oDataSet.Tables("Categories").Rows(i)(0).ToString(), oDataSet.Tables("Categories").Rows(i)(1).ToString())
                    Next i
                    oConnection.Close()
                Catch e As Exception
                    Console.WriteLine(("L'erreur suivante a été rencontrée :" + e.Message))
                End Try
            End Sub 'Main        
        End Class 'SqlDataSet    
    End Namespace 'ExempleAdoNetCSharp
    ++ et merci encore

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par 007007 Voir le message
    "Il garde la trace des modifications faites en mémoire, de façon à pouvoir les reporter sur la "vraie" base de données. "

    et comment on fait pour les reporter sur la vraie bdd ?
    Avec la méthode Update du DataAdapter

    Citation Envoyé par 007007 Voir le message
    dans le 2eme lien que tu m'as donné, dans le dernier exemple je n'ai pas compris un truc, ils ont fait un insertcommand .... aprés row(x)=valeur ... et à la fin commandbuilder et update, c'est quoi l'utilité de insertcommand ? les modifications dans les rows suffit non ? j'ai supprimé l'insertcommand du code et ça marche nikel ...
    InsertCommand, c'est pour insérer dans la base les lignes que tu ajoutes à la DataTable. DeleteCommand, pour supprimer dans la base les lignes que tu supprimes de la DataTable. Et UpdateCommand, pour mettre à jour dans la base les lignes que tu modifies dans la DataTable.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Avec la méthode Update du DataAdapter



    InsertCommand, c'est pour insérer dans la base les lignes que tu ajoutes à la DataTable. DeleteCommand, pour supprimer dans la base les lignes que tu supprimes de la DataTable. Et UpdateCommand, pour mettre à jour dans la base les lignes que tu modifies dans la DataTable.
    resalut,

    justement pourquoi on utilise insertcommand avant une modification sur le row alors qu'un simple ajout comme ça fait la meme chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim dr as datarow = madataset.table.newrow
    dr(0) = valeur
    dr(1) = valeur2
    madataset.table.rows.add(dr)
    commandbuilder = new command builde(datapter)
    datapter.update(madataset.table)
    ça marche, on voit l'ajout dans current et original alors pourquoi dans l'exemple il y'a un insertcommand avant ? à savoir que j'ai mis insertcommand tout seul mais ça n'as pas marché !!!

    et un 2eme truc :

    on utilise fillschema ou missingschemaaction pour importer aussi les constraintes clés primaires, mais j'ai remarqué que dans ma dataset sans utiliser ces 2 methodes les constraintes exite deja, par je ne peux ajouter la meme valeur dans une colonne primary key ...



    voila, et merci de ton aide encore une fois

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans ton exemple, tu utilises un CommandBuilder, qui tente de générer automatiquement les InsertCommand, DeleteCommand et UpdateCommand si elles ne sont pas définies. Dans ce cas, tu n'as pas besoin de déclarer toi-même ces commandes. Par contre, il y a des contraintes pour que ça marche bien : la requête SELECT doit porter sur une seule table (pas de jointure), et la table doit avoir une clé primaire
    Citation Envoyé par 007007 Voir le message
    et un 2eme truc :

    on utilise fillschema ou missingschemaaction pour importer aussi les constraintes clés primaires, mais j'ai remarqué que dans ma dataset sans utiliser ces 2 methodes les constraintes exite deja, par je ne peux ajouter la meme valeur dans une colonne primary key ...
    Aucune idée, j'ai jamais utilisé ça...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Par défaut
    ah ok je comprends mieux maintenant

    un autre truc si tu veux bien : lorsque on ajoute une nouvelle source de données (supposons sql server ) on a 2 possibilités, de se connecter automatiquement à une base ou d'attacher un fichier .mdf au projet. mais j'ai remarqué qu'il y'a des différences !!

    si on se connecte directement à la base :

    - la version current = la version original, j'ai testé pas mal de méthodes qui permettent de modifier la version original et non current (par ex preservechange de merge, row version) mais visual studio ne fait pas de différences, la version sur laquelle on travaille et la meme celle original !!

    si on attache une bdd .mdf :

    - il y'a une différence en current et original
    - une fois le code vb changé, la bdd se réinitialise !!? par ex au debut j'ai 2 enregistrements, et j'ai ajouté un autre, mais une fois apres je fais des modifs sur le code vb et je lance l'application je vois seulement les 2 premiers enregistrements !!


    tu peux mieux m'éclairer stp ?

    merci

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par 007007 Voir le message
    - la version current = la version original, j'ai testé pas mal de méthodes qui permettent de modifier la version original et non current (par ex preservechange de merge, row version) mais visual studio ne fait pas de différences, la version sur laquelle on travaille et la meme celle original !!
    Ca n'a pas de sens de modifier la "version originale". On modifie la version courante, qui au départ est identique à l'original, mais l'oiriginal ne change pas. Le fait d'utiliser tel ou tel type de base de données ne change rien à l'affaire : une fois les données en mémoire dans le dataset, il n'y a plus de lien avec la BDD (sauf quand tu fais un Fill ou Update)

    Citation Envoyé par 007007 Voir le message
    - une fois le code vb changé, la bdd se réinitialise !!? par ex au debut j'ai 2 enregistrements, et j'ai ajouté un autre, mais une fois apres je fais des modifs sur le code vb et je lance l'application je vois seulement les 2 premiers enregistrements !!
    Arf, il va vraiment falloir mettre ça dans la FAQ, tout le monde se fait avoir
    L'explication ici :
    http://www.developpez.net/forums/d64...i/#post3781854
    C'est valable pour tous les types de BDD fichier quand le fichier est inclus dans le projet.

Discussions similaires

  1. [Débutant] Mode déconnecté avec ADO.NET
    Par bilred dans le forum Débuter
    Réponses: 2
    Dernier message: 25/11/2008, 16h32
  2. [C#/ADO.net] mode déconnecté
    Par nightcyborg dans le forum C#
    Réponses: 25
    Dernier message: 23/02/2008, 16h25
  3. Réponses: 4
    Dernier message: 11/05/2006, 16h57
  4. [Vb.net][Ado.net] mode déconnecté avec sql
    Par hoummass dans le forum Accès aux données
    Réponses: 6
    Dernier message: 27/11/2005, 15h10
  5. [.NET] Une question technique a propos du mode asynchrone
    Par nicknolt dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/06/2004, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo