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

C# Discussion :

[ADO] Insérer un DataTable dans une table Oracle


Sujet :

C#

  1. #1
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut [ADO] Insérer un DataTable dans une table Oracle
    Bonjour,

    J'ai un DataTable rempli de données que j'aimerais insérer dans une table Oracle. Les 2 schémas sont identiques (celui du DataTable et de la table Oracle).

    J'ai pensé me créer un OracleDataAdapter pour ensuite faire un Update, mais le problème est que je ne veux pas faire de Fill() sur mon dataAdapter, je veux simplment insérer le contenu d'une dataTable qui a été remplit avant à partir d'autres tables.

    Des idées? Merci!

  2. #2
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut
    Ton da possede une methode Update() et des pptes UpdateCommand, InsertCommand et DeleteCommand. L'excellent tutoriel sur ADO.net present ici te sera sans doutes utile.

  3. #3
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Merci pour la réponse rapide, mais en fait le problème est le suivant:

    Normalement, on utilise le dataAdapter comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DataSet dataSet = new DataSet("DataSetName");
     
                String strSelectAll = "SELECT * FROM TableName";
     
                OracleDataAdapter da = new OracleDataAdapter(strSelectAll, connection);
     
                // Get all the data
                da.Fill(dataSet, "DataTableName");
     
                // Traiter le data ici
     
                // Update Database
                da.Update(dataSet, "DataTableName");
    Mais dans mon cas, je n'ai aucune requête SELECT à faire, pas plus que de Fill(), car j'ai déjà tout ce qu'il me faut, il ne me reste plus qu'à sauvegarder mon dataTable dans ma table. Je veux simplement insérer un dataTable déja existant... rien d'autre.

  4. #4
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut
    Oui, ce n'est donc pas fill qu'il faut utiliser mais Update() sur ton da.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    da.InsertCommand = "Insert into truc (colonnes) values (:values)";
    da.Update(dataSet);
    mais lit quand meme le tuto de dvp, ado.net n'est pas si simple au premier abord...

  5. #5
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Tu ne peux pas utiliser DataAdapter.Update sans avoir fait le Select ?

    Je ne vois pas ce qui empeche ca...

  6. #6
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Ahhh je comprends ! Je croyais qu'il fallait absolument initialiser la connection utilisée par le dataAdapter. Et comme le seul constructeur qui utilise un OracleConnection en paramètre est celui qui prend aussi une requête Select, je croyais qu'il fallait absolument une requête Select...

    Donc, je me crée simplement un InsertCommand et je fais da.Update(dataSet) et ça devrait marcher... je vais essayer ça.


  7. #7
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    D'apres moi non. Si ton dataSet est bien remplis avec les bonnes donnees, respectant toutes les contraintes et si tu as une requete Update qui correspond bien a ton schema, cette requete va prendre toutes les DataRow dont le DataRowState est Added, Modified, Deleted et va utiliser la bonne requete (Ajout, modif ou suppression).

    En fait faut essayer pour etre sur...

  8. #8
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Hum, ça ne fonctionne pas... Ça ne semble pas être aussi simple que ça

    Arggg

  9. #9
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Peux tu verifier les RowState des DataRow de ton DataSet ainsi que la requete d'insert ?

    Si tes lignes ne sont pas en DataRowState.Added, la commande Update ne vas pas fonctionner. Lors de l'insertion de datas dans ton DataSet, verifie que tu ne fais pas de MonDataSet.AcceptChanges(); (qui te met toutes tes DataRow en DataRowState.Unchanged).

    Enfin, verifie l'insert de ton TableAdapter. Si tout cela ne fonctionne pas, j'aurai tendamce a chercher un lien manquant entre le DataAdapter et la table de ta base de donnees...

  10. #10
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Oui le problème venait bel et bien du fait que les lignes du DataTable étaient à Unchanged. Bien vu Contrec

    Y a-t-il une façon simple de mettre toutes les lignes du DataTable à l'état Added? Présentement je boucle sur toutes les lignes du DataTable, mais je ne sais pas si c'est la façon la plus efficace.

  11. #11
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    En fait, lorsque tu entre une ligne dans ton DataTable, elle doit etre forcément en Added... Lorsque tu fais un DataTable.AccpetChanges(), cela passe toutes tes DataRow en Unchanged. Verifies donc juste apres l'insertion de lignes que tes DataRow sont bien en DataRowState.Added(). Si c'est le cas lors de l'insertion des donnees et que ce n'est plus le cas lors de l'update, tu dois avoir un moment ou ces lignes sont validées (commit qvec AcceptChanges()). A toi de faire les tests pour reperer cela.

    Sinon pour changer les DataRow, je ne connais pas d'autres solutions que de le faire comme tu fais, lignes par lignes avec SetAdded...

    En gros vérifie l'état des lignes insérées dans ton DataTable, qu'elles soient bien en Added.

  12. #12
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Oui, je comprends bien. Seulement, les lignes dans le DataTable à insérer sont obtenues à l'aide d'un Fill() effectué sur une autre table. Donc toutes les lignes sont bel et bien à Unchanged.

    Je conserverai donc la boucle visant à changer programmatiquement l'état de toutes les lignes du Datatable.

    Merci Résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 19/11/2010, 19h20
  2. Réponses: 2
    Dernier message: 22/10/2010, 16h14
  3. Réponses: 3
    Dernier message: 28/11/2006, 08h44
  4. Réponses: 3
    Dernier message: 09/09/2006, 13h24
  5. supprimer un enregistrement vide dans une table oracle
    Par shurized dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/09/2004, 16h55

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