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

C# Discussion :

Pb de format d'un dateTimePicker.


Sujet :

C#

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Pb de format d'un dateTimePicker.
    Bonjour tout le monde,

    Voila j'ai une fenêtre dans le quelle on choisit le nom de l'intervenant via une comboBox. Puis 2 DateTimePicker de format "Short" et un label qui correspond au nombre d'intervention effectuée par l'intervenant choisi durant la période choisi(par les dataTimePicker).
    Pour cela j'ai créé le code suivant :
    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
    18
    19
    20
    21
    22
    23
    24
    25
     
    			SqlConnection connection;
    			SqlCommand command;
    			SqlDataReader rader;
     
    			connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=Distrib;Integrated Security=SSPI");
    			command = new SqlCommand("SELECT COUNT(SUBSTRING(IN_NUMINTER, 1,10)) as NbInterEffectue FROM INTERVENTION, OPERER, INTERVENANT WHERE INTERVENTION.IN_NUMINTER=OPERER.O_NUMINTER AND OPERER.O_CODVENAN=INTERVENANT.IT_CODVENAN AND INTERVENANT.IT_NOMVENAN = '" + NomIntervenant.Text + "' AND IN_NUMINTER BETWEEN '" + dateTimePicker1.Format.ToString("yyyy/MM/dd") + "' AND '" + dateTimePicker2.Format.ToString("yyyy/MM/dd") + "'", connection);
    			connection.Open();
    			try
    			{
    				rader = command.ExecuteReader();
    				try
    				{
    					while (rader.Read()) 
    					NbInterEffectuée.Text = Convert.ToString(rader["NbInterEffectue"]);
    				}
    				finally
    				{
    					rader.Close();
    				}
    			}
    			finally
    			{
    				connection.Close();
    			}
    Mon problème est lorsque j'exécute mon application, il m'affiche l'erreur suivante :
    Une exception non gérée du type 'System.FormatException' s'est produite dans mscorlib.dll

    Informations supplémentaires*: La chaîne de format ne peut être que "G","g","X","x","F","f","D" ou "d".
    et me surligne en vert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			command = new SqlCommand("SELECT COUNT(SUBSTRING(IN_NUMINTER, 1,10)) as NbInterEffectue FROM INTERVENTION, OPERER, INTERVENANT WHERE INTERVENTION.IN_NUMINTER=OPERER.O_NUMINTER AND OPERER.O_CODVENAN=INTERVENANT.IT_CODVENAN AND INTERVENANT.IT_NOMVENAN = '" + NomIntervenant.Text + "' AND IN_NUMINTER BETWEEN '" + dateTimePicker1.Format.ToString("yyyy/MM/dd") + "' AND '" + dateTimePicker2.Format.ToString("yyyy/MM/dd") + "'", connection);
    Faut savoir que IN_NUMINTER est de la forme : yyyy/MM/dd c'est pour ça que j'ai mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dateTimePicker2.Format.ToString("yyyy/MM/dd")
    Mais je vois pas par quoi remplacer yyyy/MM/dd ??

    Je vous remercie d'avance pour votre aide!!

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Utilise des paramètres SQL pour passer les valeurs.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Bien que je suis du mm avis que SaumonAgile, tu devrais t'en sortir en utilisant dateTimePicker.Value.ToString("yyyy/MM/dd ") ou peut importe le format de date que ton serveur SQL a besoin.

    Par contre, l'avantage d'utiliser les paramètres, c'est que tu balances un objet DateTime et qu'il se débrouille comme un grand pour retrouver ces petits. Parce que si tu fais dans ta 1ere idée, le jour ou ton serveur SQL change de paramètre régional tu es bon pour reprendre tout ton code, et l'air de rien, c'est bon à prendre en considération.

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SaumonAgile et à varod
    Voila j'ai essayé avec une requête paramétrée mais mon problème c'est que ça fonctionne pas.

    Voici le code que ça me donne :
    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
    SqlConnection connection;
    			SqlCommand command;
    			SqlDataReader rader;
     
    			connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=Distrib;Integrated Security=SSPI");
    			SqlParameter paramNomIntervenant = new SqlParameter("@NomIntervenant", SqlDbType.Char, 20);
    			paramNomIntervenant.Value = NomIntervenant.Text;
    			SqlParameter paramDateMin = new SqlParameter("@DateMin", SqlDbType.DateTime, 8);
    			paramDateMin.Value = dateTimePicker1.Text;
    			SqlParameter paramDateMax = new SqlParameter("@DateMax", SqlDbType.DateTime, 8);
    			paramDateMax.Value = dateTimePicker2.Text;		
    			string sql = ("SELECT COUNT(SUBSTRING(IN_NUMINTER, 1,10)) as NbInterEffectue FROM INTERVENTION, OPERER, INTERVENANT WHERE INTERVENTION.IN_NUMINTER=OPERER.O_NUMINTER AND OPERER.O_CODVENAN=INTERVENANT.IT_CODVENAN AND INTERVENANT.IT_NOMVENAN = '@NomIntervenant' AND IN_NUMINTER BETWEEN '@DateMin' AND '@DateMax'");
    			command = new SqlCommand(sql, connection);
    			command.Parameters.Add(paramNomIntervenant);
    			command.Parameters.Add(paramDateMin);
    			command.Parameters.Add(paramDateMax);
    Lorsque je suis en mode debbug et ke je regarde les ".Value" alors il me donne bien la valeur de mes paramètres.

    merci d'avance!!

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu dois passer des valeurs de type datetime pour les paramètres date, or toi tu passes des string. Utilise dateTimePicker2.Value au lieu de dateTimePicker2.Text

    Supprime aussi les ' autour des paramètres dans la requête.

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SaumonAgile
    Ok mais le problème maintenant c'est que ca me surligne en vert la ligne suivante : while (rader.Read())

    et me dit la chose suivante :
    Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans system.data.dll

    Informations supplémentaires : Erreur système
    Le code est devenu celui là :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SqlConnection connection;
    			SqlCommand command;
    			SqlDataReader rader;
     
    			connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=Distrib;Integrated Security=SSPI");
    			SqlParameter paramNomIntervenant = new SqlParameter("@NomIntervenant", SqlDbType.Char, 20);
    			paramNomIntervenant.Value = NomIntervenant.Text;
    			SqlParameter paramDateMin = new SqlParameter("@DateMin", SqlDbType.DateTime, 8);
    			paramDateMin.Value = dateTimePicker1.Value;
    			SqlParameter paramDateMax = new SqlParameter("@DateMax", SqlDbType.DateTime, 8);
    			paramDateMax.Value = dateTimePicker2.Value;		
    			string sql = ("SELECT COUNT(SUBSTRING(IN_NUMINTER, 1,10)) as NbInterEffectue FROM INTERVENTION, OPERER, INTERVENANT WHERE INTERVENTION.IN_NUMINTER=OPERER.O_NUMINTER AND OPERER.O_CODVENAN=INTERVENANT.IT_CODVENAN AND INTERVENANT.IT_NOMVENAN = @NomIntervenant AND IN_NUMINTER BETWEEN @DateMin AND @DateMax");
    			command = new SqlCommand(sql, connection);
    			command.Parameters.Add(paramNomIntervenant);
    			command.Parameters.Add(paramDateMin);
    			command.Parameters.Add(paramDateMax); 
    			connection.Open();
    			try
    			{
    				rader = command.ExecuteReader();
    				try
    				{
    					while (rader.Read()) 
    					NbInterEffectuée.Text = Convert.ToString(rader["NbInterEffectue"]);
    				}
    				finally
    				{
    					rader.Close();
    				}
    			}
    			finally
    			{
    				connection.Close();
    			}
    merci d'avance!!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    As tu essayé ta requete directement dans sql server management ? Au cas ou qu'il s'agisse d'un problème de requête ...

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à varod
    Ben j'ai effecuté la requête avec l'analyseur de requête de Sql server 2000 avec des valeurs et ça fonctionné parfaitement à la base.

    C'est depuis que je l'ai inséré dans mon code que ça fonctionne plus et encore plus avec les paramètres.

    merci d'avance!!

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Juste une remarque (je ne suis pas expert sql donc c'est juste une idée )

    Mais tu ne devrais pas utiliser un :
    ExecuteScalar() au lieu de ExecuteReader()

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à binoo
    Ben ca va pas me bloquer après pour l'afficher??(dsl mé jvé po pv essayer car g un énorme pb avec mon application, pour en savoir plus --> http://www.developpez.net/forums/sho...d.php?t=504722

    cordialement

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut relance du sujet
    Bonjour tout le monde,

    Voila j'ai réussit a réparer mon problème donc je souhaiterais reprendre mon problème de cette discussion.

    REXPLICATION : e souhaite afficher le Nombre d'intervention qu'un intervenant est effectuée pendant une certaine période que l'on détail grâce aux DateimePickers.

    Voici le code :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    private void NomIntervenant_SelectedIndexChanged(object sender, System.EventArgs e)
    		{
    			SqlConnection connection;
    			SqlCommand command;
    			SqlDataReader rader;
     
    			connection = new SqlConnection("Data Source=SNCK96400031;Initial Catalog=DistribInfo;Integrated Security=SSPI");
     
    			SqlParameter paramNomIntervenant = new SqlParameter("@NomIntervenant", SqlDbType.Char, 20);
    			paramNomIntervenant.Value = NomIntervenant.Text;
    			SqlParameter paramDateMin = new SqlParameter("@DateMin", SqlDbType.DateTime, 8);
    			paramDateMin.Value = dateTimePicker1.Value;
    			SqlParameter paramDateMax = new SqlParameter("@DateMax", SqlDbType.DateTime, 8);
    			paramDateMax.Value = dateTimePicker2.Value;
     
    			string sql = ("SELECT COUNT(SUBSTRING(IN_NUMINTER, 1,10)) as NbreInterEffectue FROM INTERVENTION, OPERER, INTERVENANT WHERE INTERVENTION.IN_NUMINTER=OPERER.O_NUMINTER AND OPERER.O_CODVENAN=INTERVENANT.IT_CODVENAN AND INTERVENANT.IT_NOMVENAN = @NomIntervenant AND IN_NUMINTER BETWEEN @DateMin AND @DateMax");
    			command = new SqlCommand(sql, connection);
     
    			command.Parameters.Add(paramNomIntervenant);
    			command.Parameters.Add(paramDateMin);
    			command.Parameters.Add(paramDateMax);
     
    			connection.Open();
    			try
    			{
    				rader = command.ExecuteReader();
    				try
    				{
    					while (rader.Read()) 
    						SonNbrInter.Text = Convert.ToString(rader["NbreInterEffectue"]);
    				}
    				finally
    				{
    					rader.Close();
    				}
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.ToString());
    			}
    			finally
    			{
    				connection.Close();
    			}
     
    		}

    Lorsque j'exécute mon application, vol'erreur qui m'affichese situe ci-joint dans un document word.

    Faut savoir qu'avant j'ai effectuée cette requête via l'analyseur de requête SQL Server et ça fonctionné bien. Pour votre information, le 'O_NUMINTER' est de la forme "année/mois/jour-001".

    Je me demande si le problème ne vient pas de ses lignes :
    paramDateMin.Value = dateTimePicker1.Value;
    plus précisément de :
    dateTimePicker1.Value
    Qu'en pensez-vous??

    Si vous avez une autre idée, j'en prendré compte.

    Merci d'avance pour votre aide!!

  12. #12
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Depuis le temps qu'on te le dit, tu devrais savoir que si tu ne donnes pas le message d'erreur, on ne peut rien faire...

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SaumonAgile
    Depuis le temps qu'on te le dit, tu devrais savoir que si tu ne donnes pas le message d'erreur, on ne peut rien faire...
    Oui je suis désolé j'ai oublié d'insérer le document word avec l'erreur qui m'affiche.

    Donc je l'insére maintenant.

    Merci d'avance!!!

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Bonjour tout le monde,

    Voila j'ai enfin réussit à fair ce que je souhaité.

    Voici le code a changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlParameter paramDateMin = new SqlParameter("@DateMin", SqlDbType.VarChar, 15);
    			paramDateMin.Value = dateTimePicker1.Value.ToString("yyyy/MM/dd");
    			SqlParameter paramDateMax = new SqlParameter("@DateMax", SqlDbType.VarChar, 15);
    			paramDateMax.Value = dateTimePicker2.Value.ToString("yyyy/MM/dd");
    merci à tous!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Custom format pour DateTimePicker
    Par kineton dans le forum C#
    Réponses: 1
    Dernier message: 31/08/2009, 23h42
  2. Format de DateTimePicker
    Par sweet76 dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/08/2008, 06h48
  3. Format de DateTimePicker
    Par zandru dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/08/2008, 15h17
  4. custom format dans dateTimePicker
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 23/04/2008, 20h38
  5. DateTimePicker et format particulier des heures
    Par Sunchaser dans le forum C++Builder
    Réponses: 12
    Dernier message: 04/08/2006, 01h50

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