2017-10-12 6 views
1

Essayer de créer une requête pour interroger une base de données et renvoyer les lignes à l'aide de DatetimePicker dans C# Winform. Il renvoie une ligne très vide lorsque je clique sur la date.Datetimepicker renvoie des lignes vides lors de la recherche en C#

Mon code ressemble à ceci

private void dateTimePicker_ValueChanged(object sender, EventArgs e) 
    { 
     string constring = ConfigurationManager.ConnectionStrings["MySQLDatabaseConnection"].ConnectionString; 
     using (MySqlConnection con = new MySqlConnection(constring)) 
     { 
      string sql = "SELECT CAST(visit_date AS DATE) AS VISIT_DATE WHERE visit_date='" + dateTimePicker.Value.Date + "'"; 

      try 
      { 
       con.Open(); 
       MySqlDataAdapter da = new MySqlDataAdapter(sql, con); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       dataGridView1.DataSource = dt; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 
    } 

Est-ce que je manque quelque chose?

+0

double possible de [Quelles sont les bonnes façons de prévenir l'injection SQL?] (Https://stackoverflow.com/questions/14376473/what-are-good-ways-to-prevent-sql-injection) – mjwills

+0

@mjwills NO! Ceci est différent. Cela utilise DateTime – Markaz

+1

Je suggère humblement que vous avez besoin de le lire. Car une fois que vous aurez résolu ce problème, votre requête fonctionnera probablement. Et vous ne serez plus ouvert à l'injection SQL. – mjwills

Répondre

2

Je suppose que le DateTimePicker sélectionne un Date (sans temps) mais dans la base de données vous stockez les rendez-vous avec le temps. Si vous voulez tous les rendez-vous à cette date, vous devez utiliser vistidate >= @datestart and visitdate < DATE_ADD(@datestart, INTERVAL 1 DAY).

Notez que vous devez toujours utiliser les paramètres sql pour éviter les problèmes d'injection et de conversion SQL.

string sql = @"SELECT * FROM vms_db.waiting_appointments 
       WHERE vistidate >= @datestart 
       AND visitdate < DATE_ADD(@datestart, INTERVAL 1 DAY)"; 
MySqlDataAdapter da = new MySqlDataAdapter(sql,con); 
da.SelectCommand.Parameters.Add("@datestart", MySqlDbType.DateTime).Value = dateTimePicker.Value.Date; 
+0

Fonctionne 100% Merci beaucoup! – Markaz