none
Requête sql avec deux dates (entrée par un formulaire) comme paramètres RRS feed

  • Question

  • Je crée une base de données composée de plusieurs tables,

     

    Je souhaite utiliser la jointure externe dans mes requêtes pour lier mes tables et m'afficher certains résultats.

    Cependant pour certaines requêtes, j'aimerais délimiter mes tris par deux paramètres (dates entrées par un formulaire), mais je ne sais pas très bien comment le faire. J’ai lu le post d'Alex PETRESCU (http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/83a5f0a9-66d9-445d-815a-18f893e4f1d5/), et je ne sais pas s'il s'applique à mon cas.

    De même, puisque le résultat de cette requête devrait être imprimé, l'idée d'utiliser cette requête pour créer une vue est-elle bonne?

    Explications:

    Sur mon formulaire:

    • je choisis deux dates (zones de texte) "date1" et "date2", puis je clique sur le bouton "tri"
    • Le bouton "tri" déclenche une requête qui va joindre des tables et me donner le résultat compris entre les dates "Date1" et "Date2".
    • Puisque la requête pourra être lancée régulièrement et les résultats imprimés, est-ce une bonne idée de d'en faire une vue?

    Merci


    Petit à petit l'oiseau construit son nid
    lundi 17 mai 2010 09:20

Réponses

  • Bonjour,

    Ce n'est pas la vue qui doit filtrer la date (supprimez la clause WHERE), mais l'exécution de la requête suivante (dans le code .NET) :

    SELECT * FROM VotreVue WHERE EXP_DATE = ...

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse NOUBISSI vendredi 21 mai 2010 08:48
    jeudi 20 mai 2010 07:08
    Modérateur

Toutes les réponses

  • Bonjour,

    Cela sera beaucoup plus performant et plus simple d'utiliser une vue au niveau de votre SGBD.

    Est-ce que cela répond à votre (vos) questions ?

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    lundi 17 mai 2010 09:54
    Modérateur
  • Merci,

    (En passant, je ne sais pas où j'avais la tête mais j'aurais dû commencer mon thread par un petit "BONJOUR")

    En effet, si vous le dites ce serait certainement une meilleure idée.

    Mais étudiant autodidacte, pour mieux appréhender cela, je vais faire un test et je reviendrais dans les minutes qui suivent pour présenter le résultat ou mes difficultés (je ne l'espère pas).

    Cordialement


    Petit à petit l'oiseau construit son nid
    lundi 17 mai 2010 12:03
  • Bonjour,

    (En passant, je ne sais pas où j'avais la tête mais j'aurais dû commencer mon thread par un petit "BONJOUR")
    Ce n'est pas grave... Le "Merci" en fin de votre message comble amplement cet oubli ! :-)

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    lundi 17 mai 2010 14:00
    Modérateur
  • Bonsoir,

    Après plusieurs heures de recherches, j'ai crée un petit exemple ainsi qu'il suit:

    une base de donnée nommée BD_BRINKS.mdf dans le répertoire D:\Base ,

    j'ai un form (Form1) avec:

    1. un DateTimePicker (DateTimePicker1) derrière qui, je récupère la valeur d'un mois qui est transformé en paramètre et je génère automatiquement la création d'une vue avec ce même paramètre.
    2. un bouton qui me permettra d'afficher le résultat obtenu

    Mon code plein d'erreurs est le suivant:

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    
    
    namespace test
    {
      public partial class Form1 : Form
      {
       
    
        public Form1()
        {
          InitializeComponent();
        }
    
    
        private void button1_Click(object sender, EventArgs e)
        {
    
          SqlConnection myConn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Base\\BD_BRINKS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    
          myConn.Open();
          string cmdDate=tbx1.Text = dateTimePicker1.Value.Date.Month.ToString();
          SqlCommand cmd=new SqlCommand("CREATE VIEW vue2 (P.PAY_NOM, A.AGC_NOM, B.BQE_NOM, L.LTA_NUMERO, E.EXP_DATE")
    FROM      dbo.T_PAYS AS P RIGHT OUTER JOIN
                 dbo.T_AGENCE AS A ON P.PAY_ID = A.PAY_ID RIGHT OUTER JOIN
                 dbo.T_BANQUE AS B ON A.AGC_ID = B.AGC_ID LEFT OUTER JOIN
                 dbo.T_LTA AS L ON B.BQE_ID = L.BQE_ID LEFT OUTER JOIN
                 dbo.T_EXPEDITION AS E ON L.LTA_NUMERO = E.LTA_NUMERO
    WHERE    (E.EXP_DATE = CONVERT(DATETIME, '@E.EXP_DATE')), connection);
        cmd.Parameters.Add(new SqlParameter("@E.EXP_DATE", SqlDbType.DateTime));
          cmd.Parameters["@E.EXP_DATE"].Value=dateTimePicker1.Value.Date.Second.ToString();
        }
    
        
      }
    }
    

    Avec autant d'erreur je ne pouvais pas poursuivre ma route jusau'à la mise en service du bouton qui en principe serait facile.

    J'aimerais s'il vous plaît comprendre mes erreurs et avoir une correction pour pouvoir évoluer (et effacer quelques rides sur mon visage) afin de prétendre un jour connaître le nécessaire.


    Merci

     


    Petit à petit l'oiseau construit son nid
    mardi 18 mai 2010 19:35
  • Bonjour,

     

    Est-il absolument nécessaire de créer le View dans le code ? Si vous créez votre view dans SQL Server Management Studio, il sera plus facile. En plus, le view doit être crée une seule fois, donc écrire une procédure C# pour le créer est trop encombrant.

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

     

    mercredi 19 mai 2010 09:13
  • Bonjour Alex,

    Je Peux effectivement créer le view dans SQL Server Management Studio, mais je ne sais pas comment la faire dépendre du paramètre ''date'' qui devra être importer depuis un formulaire (à partir d'un DataTimePicker).

    Cordialement


    Petit à petit l'oiseau construit son nid
    mercredi 19 mai 2010 13:08
  • Voici mon code pour créer la vue dans SQL Server Management Studio,

    mais j'aimerais savoir comment entrer comme paramètre la date (de la condition where) à partir d'un formulaire.

    Car j'aimerais générer le résultat de cette vue à différentes date.

    SELECT        P.PAY_NOM, A.AGC_NOM, B.BQE_NOM, L.LTA_NUMERO, E.EXP_DATE
    FROM            dbo.T_PAYS AS P RIGHT OUTER JOIN
                             dbo.T_AGENCE AS A ON P.PAY_ID = A.PAY_ID RIGHT OUTER JOIN
                             dbo.T_BANQUE AS B ON A.AGC_ID = B.AGC_ID LEFT OUTER JOIN
                             dbo.T_LTA AS L ON B.BQE_ID = L.BQE_ID LEFT OUTER JOIN
                             dbo.T_EXPEDITION AS E ON L.LTA_NUMERO = E.LTA_NUMERO
    WHERE        (E.EXP_DATE = CONVERT(DATETIME, '2010-05-23'))

    Merci


    Petit à petit l'oiseau construit son nid
    mercredi 19 mai 2010 15:10
  • Bonjour,

    Ce n'est pas la vue qui doit filtrer la date (supprimez la clause WHERE), mais l'exécution de la requête suivante (dans le code .NET) :

    SELECT * FROM VotreVue WHERE EXP_DATE = ...

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse NOUBISSI vendredi 21 mai 2010 08:48
    jeudi 20 mai 2010 07:08
    Modérateur
  • Bonjour,

    Merci bien pour cette réponse, elle me sera d'une grande utilité.

    Cordialement


    Petit à petit l'oiseau construit son nid
    vendredi 21 mai 2010 08:53