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][C#]Comment forcer Fill correct de DataSet typé ?


Sujet :

Accès aux données

  1. #1
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut [ADO.NET][C#]Comment forcer Fill correct de DataSet typé ?
    Bonjour à tous !

    J'ai dans SQL Server Server une procédure stockée qui renvoie plusieurs jeux d'enregistrement. J'ai crée un DataSet typé qui reprend exactement la structure des données qui sont renvoyées par la procédure stockée. Quand j'exécute ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SqlDataAdapter adapter = new SqlDataAdapter( command );
    adapter.Fill( monDataSet );
    mon DataSet se remplit, mais pas comme je voudrais... La méthode Fill() crée autant de DataTable que j'ai de jeux d'enregistrements, alors qu'il faudrait qu'elle remplisse les DataTable que j'ai définies (sinon ça ne sert à rien d'avoir un DataSet typé !)

    Pour l'intstant je m'en sors en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    object[] tab;
    foreach( DataTable dt in new DataTable[] { monDataSet.Table1, monDataSet.Table2, monDataSet.Table3 } )
    {
    	tab = new object[dt.Columns.Count];
    	while( objReader.Read() )
    	{
    		objReader.GetValues( tab );
    		dt.Rows.Add( tab );
    	}
    	objReader.NextResult();
    }
    mais c'est pas terrible...
    Quelqu'un a une idée :
    Merci d'avance

  2. #2
    doccpu
    Invité(e)
    Par défaut
    c quoi ton provider ?

  3. #3
    Membre régulier Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Points : 78
    Points
    78
    Par défaut [C#][ADO.NET] DataSet typé
    Bonsoir,
    Il me semble que tu doit chargé un model de relation, je crois que c'est .xld mais pas sur, en plus ca évite les tables temporaires.
    Je recherche aussi des infos sur dataset fortement typés.

    See ya_
    philo

  4. #4
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par doccpu
    c quoi ton provider ?
    Le provider SQL Server (System.Data.SqlClient).

    Citation Envoyé par philo71
    Il me semble que tu doit chargé un model de relation, je crois que c'est .xld mais pas sur, en plus ca évite les tables temporaires.
    C'est quoi un xld ? A moins que tu veuilles dire .xsd ? Si tu parles de xsd, mon DataSet est défini à partir d'un fichier xsd, et ça crée quand même des tables temporaires

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bonjour Manralf

    Dans ton cas de figure, je me demandais s'il n'était pas preferable d'utiliser la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SqlDataAdapter adapter = new SqlDataAdapter(command); 
    adapter.Fill(monDataSet.Table1);
    //...etc...
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Salut neguib

    la solution que tu proposes fonnctionnerait si je n'avais qu'une seule DataTable dans mon DataSet... Or j'en ai plusieurs et
    J'ai dans SQL Server Server une procédure stockée qui renvoie plusieurs jeux d'enregistrement.
    Pour l'instant je ne vois pas d'autre moyen que celui que j'ai indiqué dans le premier message, à moins que quelqu'un ait une meilleure solution :

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Manralf
    Salut neguib

    la solution que tu proposes fonnctionnerait si je n'avais qu'une seule DataTable dans mon DataSet... Or j'en ai plusieurs et
    J'ai dans SQL Server Server une procédure stockée qui renvoie plusieurs jeux d'enregistrement.
    Pour l'instant je ne vois pas d'autre moyen que celui que j'ai indiqué dans le premier message, à moins que quelqu'un ait une meilleure solution :
    Pas mieux désolé
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre régulier Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Points : 78
    Points
    78
    Par défaut dataset
    Bonjour,
    Voici une description de dataset typé !
    Datasettypé : http://www.supinfo-projects.com/fr/2.../introduction/

    Je doit changé mon VS2003 car il est buggé !
    quelqu'un sait ou je peux téléchager une version francaise !



    CDLT
    Philo

  9. #9
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Il n'y a pas d'info qui puisse m'aider dans ton lien

    Pour récupérer les versions Express de Visual Studio 2005 : http://www.microsoft.com/france/msdn...p/default.mspx

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Sincèrement Manralf si tu n'es pas sous 2.0, je pense que tu as fait déjà le maximum, à moins de carrément implémenter ton propre DbDataAdapter ( et c'est pas gagné encore)
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par neguib
    Sincèrement Manralf si tu n'es pas sous 2.0, je pense que tu as fait déjà le maximum, à moins de carrément implémenter ton propre DbDataAdapter ( et c'est pas gagné encore)
    En même temps, c'est juste une classe qui implémente IDbDataAdapter

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Morpheus
    Citation Envoyé par neguib
    Sincèrement Manralf si tu n'es pas sous 2.0, je pense que tu as fait déjà le maximum, à moins de carrément implémenter ton propre DbDataAdapter ( et c'est pas gagné encore)
    En même temps, c'est juste une classe qui implémente IDbDataAdapter
    Certes mais autant ne pas perdre les facilités du SqlDataAdapter (à réimplementer entièrement) et surtout la surcharge du Fill n'est pas des plus evidentes
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Membre du Club Avatar de Manralf
    Inscrit en
    Août 2005
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par neguib
    Citation Envoyé par Morpheus
    Citation Envoyé par neguib
    Sincèrement Manralf si tu n'es pas sous 2.0, je pense que tu as fait déjà le maximum, à moins de carrément implémenter ton propre DbDataAdapter ( et c'est pas gagné encore)
    En même temps, c'est juste une classe qui implémente IDbDataAdapter
    Certes mais autant ne pas perdre les facilités du SqlDataAdapter (à réimplementer entièrement) et surtout la surcharge du Fill n'est pas des plus evidentes
    Hmmm... en reprenant les classes du projet Mono et en les adaptant... non c'était pour rire
    Je marque le problème résolu.

  14. #14
    doccpu
    Invité(e)
    Par défaut
    c un peu tard mais les DataAdapter ne sont prévus que pour renvoyer les données d'une seule table.
    Donc soit tu crée autant de DataAdapter qu'il y a de tables soit tu crée autant de selectcommand qu'il y a de table.

    en utilisant conjointement les selectCommand et le sqlCommandBuilder tu peux arriver a n'avoir qu'un DataAdapter mais il te faudra toujour charger les tables 1 a 1 dans le dataset. Donc pour moi autant se simplifier la vie avec la multitude de DataAdapter.

    Desolé peux pas mieux !

  15. #15
    Membre régulier Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par neguib
    Bonjour Manralf

    Dans ton cas de figure, je me demandais s'il n'était pas preferable d'utiliser la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SqlDataAdapter adapter = new SqlDataAdapter(command); 
    adapter.Fill(monDataSet.Table1);
    //...etc...
    Citation Envoyé par Manralf
    Salut neguib

    la solution que tu proposes fonnctionnerait si je n'avais qu'une seule DataTable dans mon DataSet... Or j'en ai plusieurs et
    J'ai dans SQL Server Server une procédure stockée qui renvoie plusieurs jeux d'enregistrement.
    FAUX, j'utilise cela pour un de mes projets (procédures stockées retournant plusieurs tables ; et SqlDataAdapter et ça fonctionne très bien). sauf que c'est directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SqlDataAdapter adapter = new SqlDataAdapter(command); 
    adapter.Fill(monDataSet);
    //...etc...
    @++

    NeoMan

    PS: j'ai pas eu le temps de poursuivre la lectures des autres réponse je me suis arrêter à ça.
    Vas-y court petit bug! Profites! On verra bien qui rira le dernier...

  16. #16
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [C#][ADO.NET] DataSet typé
    Dans ce cas NeoMan tu es peut être en mesure de resoudre le souci premier de Manralf
    Citation Envoyé par Manralf
    Bonjour à tous !

    J'ai dans SQL Server Server une procédure stockée qui renvoie plusieurs jeux d'enregistrement. J'ai crée un DataSet typé qui reprend exactement la structure des données qui sont renvoyées par la procédure stockée. Quand j'exécute ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SqlDataAdapter adapter = new SqlDataAdapter( command );
    adapter.Fill( monDataSet );
    mon DataSet se remplit, mais pas comme je voudrais... La méthode Fill() crée autant de DataTable que j'ai de jeux d'enregistrements, alors qu'il faudrait qu'elle remplisse les DataTable que j'ai définies (sinon ça ne sert à rien d'avoir un DataSet typé !)

    Pour l'intstant je m'en sors en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    object[] tab;
    foreach( DataTable dt in new DataTable[] { monDataSet.Table1, monDataSet.Table2, monDataSet.Table3 } )
    {
    	tab = new object[dt.Columns.Count];
    	while( objReader.Read() )
    	{
    		objReader.GetValues( tab );
    		dt.Rows.Add( tab );
    	}
    	objReader.NextResult();
    }
    mais c'est pas terrible...
    Quelqu'un a une idée :
    Merci d'avance
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  17. #17
    Membre régulier Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Points : 76
    Points
    76
    Par défaut Re: [C#][ADO.NET] DataSet typé
    Citation Envoyé par neguib
    Dans ce cas NeoMan tu es peut être en mesure de resoudre le souci premier de Manralf
    Malheureusement pas exactement... Car dans mon projet c'était des DataSet non typé. Mais ça tournait nickel quand même.
    Voici comment ça tournait (de tête, les sources sont à mon travail et j'ai même pas VS sous la main ) :
    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();
    SqlConnection connection = new SqlConnection("ma chaîne de connection");
    SqlCommand command = new SqlCommand("Ma_procédure_stockée", connection);
    command.CommandType = CommandType.StoredProcedure;
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    connection.Open();
    adapter.Fill(dataset);
    connection.Close();
    foreach(DataTable table in dataset.Tables)
    {
    	// Traitement des différentes tables retournées par la procédures stockées
    }
    Mais pour les DataSet typés, je ne suis pas sûr que la listes Tables, référence les tables typées. Donc ça ne peut pas fonctionner. De plus je ne suis pas sûr de tout que procédures stockées puissent retourner les tables dans les tables typées.
    A ta place je serais la chose suivante :
    1- Je fais mon DataSet typé avec mes tables typées
    2- Je défini au moins une méthode de remplissage à chaque table
    3- Je fais une classe provider qui lance le chargement de toute les tables et retourne le dataset typé.
    4- Si je veux utiliser le dataset par un formview & co, j'instancie un ObjectDataSource qui est configuré pour utiliser ma classe provider et sa méthode de chargement.

    Et là je crois que ça sera carré et cohérent avec les principes .NET

    A propos ton dataset typé est fait sous quel framework (1.0, 1.1, 2.0) et quel programme (VS2003, VS2005, nodpad ) ??

    @++

    NeoMan

    C'est tout de suite mieux quand on a le temps de répondre ...
    Vas-y court petit bug! Profites! On verra bien qui rira le dernier...

  18. #18
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [C#][ADO.NET] DataSet typé
    Citation Envoyé par NeoMan
    A propos ton dataset typé est fait sous quel framework (1.0, 1.1, 2.0) et quel programme (VS2003, VS2005, nodpad ) ??
    @++
    NeoMan
    C'est tout de suite mieux quand on a le temps de répondre ...
    Dans ce cas relis bien tout le post, tu as déjà les reponses essentielles à tes questions. Et rassures-toi Manralf n'est pas non plus le premier venu
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  19. #19
    Membre régulier Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Points : 78
    Points
    78
    Par défaut [C# .net 1.1] [ado.net] dataset typés
    bonjour,
    J'arrive bien a créer le userdataset.xsd mais lorsque je click sur l'explorateur de serveurs je renseigne le parametrage de ma base SQL srv 2000, le test de connection et positif et lorsque je click sur le bouton ok, j'ai le message d'erreur suivant :
    <Unable to connect to database.
    It is only to connect to SQL Server Desktop Engine databases and Microsoft Access databases with this version ok visual Studio>
    Mon Visual Studio 2003 est en anglais.
    CDLT
    Philo

  20. #20
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [C# .net 1.1] [ado.net] dataset typés
    Citation Envoyé par philo71
    ...mais lorsque je click sur l'explorateur de serveurs...
    Ici si je me rappelle bien cela se passe en 2 temps:
    1. Ajouter Connexion Serveur
    2. Ajouter Connexion BDD
    As-tu effectuer ces 2 étapes avec les verifs de connections :
    Si oui lorsque tu poses par exemple un composant sqlconnection > propriété> connectionstring > parcourir : ta base apparaît-elle dans la liste :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ADO.Net][C#] Comment utiliser Mysql ?
    Par soltani.slim dans le forum Accès aux données
    Réponses: 13
    Dernier message: 31/08/2006, 12h57
  2. [ADO.NET][C#] Comment recupérer contraintes dans Dataset ?
    Par irnbru dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/02/2006, 00h53
  3. [ADO.Net][C#] Comment recupérer infos DataRowState.Deleted ?
    Par titoux_fr dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/02/2006, 11h41
  4. [ADO.Net][C#] Comment récupérer 1 valeur du BindingContext ?
    Par yann_DZ dans le forum Accès aux données
    Réponses: 2
    Dernier message: 24/01/2006, 21h56
  5. [ADO.Net][C#] Comment récupérer des infos d'une table SQL ?
    Par lamojuli dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/01/2006, 16h00

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