none
TABLEADAPTER - Variable pour liste de valeurs clause IN RRS feed

  • Question

  • Bonjour,

    Je souhaite utiliser un tableadapter qui permet de variabiliser les valeurs de la clause IN.

    Pour la clause WHERE : WHERE NUMERO = @numero

    Pour la clause IN : WHERE NUMERO IN(@listeNumeros). Quand j'exécute cette requete du tableadpater, je ne peux que renseigner une valeur numérique pour la variable @listeNumeros. Je ne sais pas comment lui passer une liste de numéros pour avoir l'équivalent d'une requête :

    WHERE NUMERO IN(@listeNumeros)

    @listeNumeros = 12,15,25

    La requete devient WHERE NUMERO IN(12,15,25)

    Cordialement,

    vendredi 24 janvier 2014 15:38

Réponses

  • Bonjour,

    Il n'est pas possible de passer une liste de valeurs dans une clause IN depuis TableAdapter. Vous devez malheureusement générer vous même la requêtes à la main en utilisant autant de paramètres que nécessaires :

    WHERE NUMERO IN (@n1, @n2, @n3)

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera lundi 27 janvier 2014 05:43
    • Marqué comme réponse Aurel Bera mercredi 29 janvier 2014 11:17
    dimanche 26 janvier 2014 23:58
    Modérateur
  • Bonjour,

    Merci d'avoir consacré un peu de temps pour répondre à ma demande.

    J'ai résolu mon problème car le report attendait un datatable et non un dataset, comme suit :

    rptViewer.LocalReport.DataSources.Add("ViewFacturesDataSet_T_Factures", oDataSet.Tables("T_Factures")))

    Cordialement,
    • Marqué comme réponse Aurel Bera mercredi 29 janvier 2014 11:17
    mercredi 29 janvier 2014 11:15

Toutes les réponses

  • Bonjour,

    Il n'est pas possible de passer une liste de valeurs dans une clause IN depuis TableAdapter. Vous devez malheureusement générer vous même la requêtes à la main en utilisant autant de paramètres que nécessaires :

    WHERE NUMERO IN (@n1, @n2, @n3)

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera lundi 27 janvier 2014 05:43
    • Marqué comme réponse Aurel Bera mercredi 29 janvier 2014 11:17
    dimanche 26 janvier 2014 23:58
    Modérateur
  • Bonjour,

    Merci pour votre réponse.

    J'ai donc créé un dataset par l'interface graphique ViewFacturesDataSet

    Dans mon code, je voudrai instancier un sqltableadapter généré manuellement pour le select in et récupérer les données dan un datatable. Je passe ensuite ce datatable dans un reportviewer pour l'impression. Mais j'ai problème et je ne sais pas comment faire.

     ' instanciation du table adapter pour traitement des données "Client"
            Dim unClientTableAdapter As New ViewClientsDataSetTableAdapters.T_ClientsTableAdapter()
            Dim unClientTable As ViewClientsDataSet.T_ClientsDataTable = unClientTableAdapter.GetDataUnCLient(idClient)

            Dim connDB As SqlConnection = New SqlConnection(My.Settings.SQLGestionCommercialeConnectionString)
            Dim oSqlDataAdapter As New SqlDataAdapter("Select * From T_Factures", connDB)
            Dim oDataSet As ViewFacturesDataSet = New ViewFacturesDataSet()
            oSqlDataAdapter.Fill(oDataSet, "T_Factures")

            ' Partie commune
            rptViewer.LocalReport.ReportEmbeddedResource = "GestionCommerciale.ReportRelance.rdlc"
            rptViewer.LocalReport.DataSources.Clear()
            rptViewer.LocalReport.DataSources.Add(New ReportDataSource("ViewClientsDataSet_T_Clients", unClientTable))
            rptViewer.LocalReport.DataSources.Add(New ReportDataSource("ViewFacturesDataSet_T_Factures", oDataSet))

    Problème sur cette dernière ligne : La valeur n'est pas comprise dans la plage attendue

    Si vous avez une idéee.

    Cordialement,

    mardi 28 janvier 2014 16:14
  • Bonjour,

    L'erreur se trouve sur cette ligne ?

    rptViewer.LocalReport.DataSources.Add(New ReportDataSource("ViewFacturesDataSet_T_Factures", oDataSet))

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 29 janvier 2014 00:12
    Modérateur
  • Bonjour,

    Merci d'avoir consacré un peu de temps pour répondre à ma demande.

    J'ai résolu mon problème car le report attendait un datatable et non un dataset, comme suit :

    rptViewer.LocalReport.DataSources.Add("ViewFacturesDataSet_T_Factures", oDataSet.Tables("T_Factures")))

    Cordialement,
    • Marqué comme réponse Aurel Bera mercredi 29 janvier 2014 11:17
    mercredi 29 janvier 2014 11:15