2017-07-03 2 views
-1

Im en train de faire une webapp dans laquelle j'ai besoin de filtrer un graphique avec une plage de dates, cette plage est sélectionnée avec deux calendriers qui transmettent les dates à deux zones de texte différentes. J'ai essayé de deux manières différentes: avec des paramètres de filtre et avec la requête "entre @ date1 et @ date2".La conversion a échoué lors de la conversion de la date et/ou de l'heure de la chaîne de caractères.

La chose est que je reçois un problème qui dit:

Échec de la conversion date et/ou le temps de chaîne de caractères. Cette erreur apparaît uniquement lorsque je choisis la deuxième plage de dates, peu importe l'ordre dans lequel je choisis les dates dans les calendriers. J'ai également vérifié mes conversions datetime.

J'ai debbuged déjà et je ne vois pas l'erreur dans mon code:

protected void Calendar2_SelectionChanged(object sender, EventArgs e) 
    { 
     txtDate2.Text = Calendar2.SelectedDate.ToShortDateString(); 
     Calendar2.Visible = false; 
    } 

    protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
    { 
     txtDate1.Text = Calendar1.SelectedDate.ToShortDateString(); 
     Calendar1.Visible = false; 
    } 

ceci est ma requête dans le côté de code et client:

protected void btnShow_Click(object sender, EventArgs e) 
{ 
    DateTime date1 = Convert.ToDateTime(txtDate1.Text); 
    DateTime date2 = Convert.ToDateTime(txtDate2.Text); 

    using (SqlConnection conn = new SqlConnection(CONNECTION_STRING)) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      try 
      { 
       cmd.Connection = conn; 
       cmd.CommandType = System.Data.CommandType.Text; 
       cmd.CommandText = "select Family, sum (TimeMins) as sumfield from DTCres where DateCres between @Date1 and @Date2 group by Family order by sumfield desc "; 
       cmd.Parameters.AddWithValue("@Date1", date1); 
       cmd.Parameters.AddWithValue("@Date2", date2); 

       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       //SqlDataReader dr = cmd.ExecuteReader(); 

       //if (dr.HasRows == !true) 
       //{ 
       // //dateLabel.Visible = true; 
       //} 
       //if (dr.HasRows == true) 
       //{ 
       // //dateLabel.Visible = false; 
       //} 
       conn.Close(); 
      } 
      catch (Exception nessie) 
      { 
       string doc = nessie.Message; 
       //dateLabel.Visible = true; 
      } 
     } 
    } 
} 

<asp:SqlDataSource ID="SqlDS" runat="server" ConnectionString="<%$ ConnectionStrings:DTCrestronConnectionString %>" 
        SelectCommand="select Family, sum (TimeMins) as sumfield from DTCres where DateCres between @Date1 and @Date2 group by Family order by sumfield desc" 
        FilterExpression="Family='{0}'"> 
        <SelectParameters> 
         <asp:ControlParameter Name="Date1" ControlID="txtDate1" PropertyName="Text" Type="String"/> 
         <asp:ControlParameter Name="Date2" ControlID="txtDate2" PropertyName="Text" Type="String"/> 
        </SelectParameters> 
        <FilterParameters> 
         <asp:ControlParameter ConvertEmptyStringToNull="false" Name="Family" ControlID="cmbChartFam1" PropertyName="Text" /> 
        </FilterParameters> 
       </asp:SqlDataSource> 
      </td> 

s'il vous plaît, toute aide serait si gentil, et merci d'avance

+1

Quelle ligne lance spécifiquement l'erreur? Cela ressemble à l'une des conversions DateTime qui poserait la question, quelle est spécifiquement la chaîne que vous essayez de convertir? –

+0

Vous devriez entrer cela comme une réponse afin que les gens sachent que vous avez compris et ce que vous avez trouvé. Voir: https://stackoverflow.com/help/self-answer –

Répondre

0

Oh merci de répondre! Je l'ai déjà résolu: il semble que la valeur de la zone de texte ne soit pas convertie du tout, donc je l'ai fait: txtDate1.Text = Calendar1.SelectedDate.Date.ToString("yyyy-MM-dd"); au lieu d'avoir ceci: txtDate2.Text = Calendar2.SelectedDate.ToShortDateString(); Je pense que ToShortDateString créait un conflit ici hehe.