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

ASP.NET Discussion :

commande sql et élément Session


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Points : 67
    Points
    67
    Par défaut commande sql et élément Session
    Bonjour,

    J'utilise ce code (avec commande SQL) pour déterminer la valeur max d'un colonne d'une table de ma base de donnée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        protected void Button1_Click(object sender, EventArgs e)
        {
            int maxx;
            using (SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SecurityTutorials.mdf;Integrated Security=True;User Instance=True"))
            {
                    con.Open();
                    //AccGetOpTX
                    using (SqlCommand cmd1max = new SqlCommand("SELECT MAX (AccGetOpTX) FROM airnode", con))
                    {
                        //AccGetOpTX
                        maxx = (int)cmd1max.ExecuteScalar();
     
                    }
                    con.Close();
            }
            Label1.Text = maxx.ToString();
        }
    Mais je veux déterminer ce valeur max mais entre deux date (date début et date fin)

    J'ai chaque dans un élement Session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string date_debut= Session["sesscald1"] as string;
    string date_fin= Session["sesscald2"] as string;

    A mon avis il faut utiliser BETWEEN dans la commande SQL.
    je peux utiliser les deux sessions dans ma commande sql?
    exp: WHERE DateTime BETWEEN date_debut AND date_fin

    Si non comment faire?
    merci d'avance

  2. #2
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Tu peux en effet utiliser le between et tes variables de session.
    Pour cela dans ton select il faut que tu transformes tes string en date avec les fonctions cast ou convert : http://msdn.microsoft.com/fr-fr/library/ms187928.aspx

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Tu peux en effet utiliser le between et tes variables de session.
    Pour cela dans ton select il faut que tu transformes tes string en date avec les fonctions cast ou convert : http://msdn.microsoft.com/fr-fr/library/ms187928.aspx
    Merci
    A mon avis je n'est pas besoin de convertir les deux sessions.
    la source des deux session est l'élément calendar (ils sont déja de type date)

  4. #4
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Lorsque tu vas créer ta requête et les insérer tu vas les passer en format texte. La conversion est donc utile.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Lorsque tu vas créer ta requête et les insérer tu vas les passer en format texte. La conversion est donc utile.
    ok
    alors il faut que je caste mes deux session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string date_debut= Session["sesscald1"] as string;
    string date_fin= Session["sesscald2"] as string;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("SELECT CAST(date_debut AS datetime(50)),CAST(date_fin AS datetime(50)),MAX (AccGetOpTX) FROM airnode where DATETIME between (date_debut) AND (B]date_fin[/B])", con))
    Mais sa marche pas, apparemment il faut que je caste nom de colonne est pas le nom de session.
    Vous pouvez me donner un cout de main
    merci

  6. #6
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Il faut que tu construises ta requête de manière différente :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("SELECT MAX (AccGetOpTX) FROM airnode where DATETIME between CAST('"+date_debut+"' AS datetime(50)) AND CAST('"+date_fin+"' AS datetime(50))", con))

    C'est un premier temps. Le mieux est d'utiliser des requêtes paramétrées en modifiant ta requête ainsi
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("SELECT MAX (AccGetOpTX) FROM airnode where DATETIME between CAST('@DATE1' AS datetime(50)) AND CAST('@DATE2' AS datetime(50))", con))

    Puis en lui affectant les paramètres
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    command.Parameters.Add(new SqlParameter("@DATE1", date_debut));
    command.Parameters.Add(new SqlParameter("@DATE2", date_fin));

    NB : Par contre cela implique (enfin je crois) de te séparer de ton using sur la command

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Il faut que tu construises ta requête de manière différente :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("SELECT MAX (AccGetOpTX) FROM airnode where DATETIME between CAST('"+date_debut+"' AS datetime(50)) AND CAST('"+date_fin+"' AS datetime(50))", con))

    C'est un premier temps. Le mieux est d'utiliser des requêtes paramétrées en modifiant ta requête ainsi
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ("SELECT MAX (AccGetOpTX) FROM airnode where DATETIME between CAST('@DATE1' AS datetime(50)) AND CAST('@DATE2' AS datetime(50))", con))

    Puis en lui affectant les paramètres
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    command.Parameters.Add(new SqlParameter("@DATE1", date_debut));
    command.Parameters.Add(new SqlParameter("@DATE2", date_fin));

    NB : Par contre cela implique (enfin je crois) de te séparer de ton using sur la command

    merci bien
    j'avance pas à pas
    j'utilise une requête simple pour tester puis j'utiliserais avec paramètres.

    voici ma nouvelle version du requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (SqlCommand cmd1max = new SqlCommand("SELECT MAX (AccGetOpTX) FROM airnode where DATETIME between CAST('" + date_debut+ "' AS date) AND CAST('" + date_fin+ "' AS date)", con))
    Mais un erreur après l'excution:
    Exception Details: System.InvalidCastException: Specified cast is not valid.
    Rq:ma table airnode contient deux colonnes AccGetOpTX et DATETIME

    apparamment l'erreur vient du colonne DATETIME

  8. #8
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Il n'est pas optimal d'appeler une colonne du même nom qu'un type. Peux-tu facilement changer ton nom de colonne par autre chose ?
    Sinon il faut le mettre avec des `datetime` je crois.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par jbrasselet Voir le message
    Il n'est pas optimal d'appeler une colonne du même nom qu'un type. Peux-tu facilement changer ton nom de colonne par autre chose ?
    Sinon il faut le mettre avec des `datetime` je crois.
    oui c'est juste votre remarque
    mais je préfaire de ne pas changer datetime, parce que je l’utiliser dans le code de toute mon application!
    j'ai essayé avec `datetime`
    mais sa marche pas:
    System.Data.SqlClient.SqlException: Incorrect syntax near '`'.
    j'espere que je trouverais une solution
    merci pour votre aide

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par makin_toch Voir le message
    oui c'est juste votre remarque
    mais je préfaire de ne pas changer datetime, parce que je l’utiliser dans le code de toute mon application!
    j'ai essayé avec `datetime`
    mais sa marche pas:
    j'espere que je trouverais une solution
    merci pour votre aide
    Essaye avec
    [airnode].[DATETIME]
    Pour éviter toute confusion
    Ensuite pourquoi ne pas utiliser des paramètres de type date ? Pas besoins de cast, c'est le code qui s'en charge
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            SqlParameter date1 = new SqlParameter();
            date1.SqlDbType = System.Data.SqlDbType.DateTime;
            date1.ParameterName = "DATE1";
            date1.Value = date_debut;
            command.Parameters.Add(date1);
    Dernier point, on ne fait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string date_fin= Session["sesscald2"] as string;
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string date_fin= ((DateTime)Session["sesscald2"]).ToString();
    Bande de sagouins

    Et à la limite si tu utilises les paramètre de type date, donne lui directement l'objet DateTime sans passer par un string.

  11. #11
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    En effet tu as raison. Je sais pas pourquoi dans mes paramètre j'ai laissé en string.

Discussions similaires

  1. Arret Commande SQL dès un élément trouvé
    Par obione dans le forum Langage SQL
    Réponses: 13
    Dernier message: 17/06/2008, 08h31
  2. [c#] Problème sessions et commandes SQL
    Par skystef dans le forum ASP.NET
    Réponses: 10
    Dernier message: 18/12/2006, 18h08
  3. [JDBC] Commande SQL récalcitrante
    Par Dahu dans le forum JDBC
    Réponses: 7
    Dernier message: 05/04/2005, 16h03
  4. commande SQL truncate table xxx
    Par Yogy dans le forum SQL
    Réponses: 1
    Dernier message: 07/10/2004, 14h57
  5. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 11h59

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