none
Comment initialiser la propriété SelectCommand d'un DataAdapter avant le premier .Fill RRS feed

  • Question

  • Bonjour,

    J'ai une table décrite dans un Dataset et je souhaite compléter la clause Where de la commande Select avant de faire le premier .FILL avec les commandes suivantes :

    Dans le load du formulaire :

    requeteDefaut =  maTableTableAdapter.Adapter.SelectCommand.CommandText ;

    Et au moment de l'exécution de la requête :

    maTableTableAdapter.Adapter.SelectCommand.CommandText = requeteDefaut + ClauseWhereDynamique;
    maTableTableAdapter.Fill(monDs.MaTable);

    Je ne peux pas utiliser les paramètres car la clause where est totalement dynamique. De même, la variable RequeteDefaut dépend bien sur de la table ou de la vue maTable.

    Malheureusement, dans le load, l'objet maTableTableAdapter.Adapter.SelectCommand n'est pas encore initialisé (valeur NULL) et je ne peux pas récupérer la commande Select de base.

    Merci d'avance à ceux qui peuvent m'apporter une aide.

    mercredi 18 mai 2011 16:04

Réponses

  • Bonjour,

    même si votre clause where est totalement dynamique vous avez toujours la possibilité de construire la requête paramétrée dynamiquement.

    Par exemple, même si vous ne connaissez pas à l'avance le nombre de paramètres qui seront utilisés dans la clause where

    - vous ajoutez si besoin le critère dans la chaine en fonction de vos régles de gestion ( en construisant la chaine de requête via un StringBuilder par exemple )

    - vous déclarez alors un DbParameter et l'ajoutez à la collection Parameter de votre DbCommand

    Une fois la construction de la chaine terminée, et les paramètre initialisés vous pouvez alors executez votre requête

    Cordialement

    mercredi 18 mai 2011 22:20
    Modérateur
  • Bonjours

    Je vous conseille d'utiliser les parametres sql au lieu de cette technique. Votre code est non sécurisé de cette façon

    matableadapter.SelectCommand.Parameters.Add(
      "@nomparam1danslabase", SqlDbType.VarChar, 80).Value = "abc";
     matableadapter.SelectCommand.Parameters.Add(
      "@nomparam2danslabase", SqlDbType.Int).Value = 888;
     categoriesAdapter.Fill(matableadapter);
    
    Cordialement

    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    mardi 24 mai 2011 20:59

Toutes les réponses

  • Bonjour,

    même si votre clause where est totalement dynamique vous avez toujours la possibilité de construire la requête paramétrée dynamiquement.

    Par exemple, même si vous ne connaissez pas à l'avance le nombre de paramètres qui seront utilisés dans la clause where

    - vous ajoutez si besoin le critère dans la chaine en fonction de vos régles de gestion ( en construisant la chaine de requête via un StringBuilder par exemple )

    - vous déclarez alors un DbParameter et l'ajoutez à la collection Parameter de votre DbCommand

    Une fois la construction de la chaine terminée, et les paramètre initialisés vous pouvez alors executez votre requête

    Cordialement

    mercredi 18 mai 2011 22:20
    Modérateur
  • Bonjour, Rv68

    Est-ce que vous avez testé la solution proposée ? Merci pour partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 23 mai 2011 07:50
  • Bonjours

    Je vous conseille d'utiliser les parametres sql au lieu de cette technique. Votre code est non sécurisé de cette façon

    matableadapter.SelectCommand.Parameters.Add(
      "@nomparam1danslabase", SqlDbType.VarChar, 80).Value = "abc";
     matableadapter.SelectCommand.Parameters.Add(
      "@nomparam2danslabase", SqlDbType.Int).Value = 888;
     categoriesAdapter.Fill(matableadapter);
    
    Cordialement

    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    mardi 24 mai 2011 20:59