Исключение формата: строка не была распознана как допустимый DateTime - PullRequest
0 голосов
/ 09 сентября 2011

привет, у меня есть метод для получения значений из базы данных и представления этих значений в элементах управления диаграммы.

и это метод ...

      public static void Hourlyattendence(System.DateTime startdate, System.DateTime enddate, string StartHour, string EndHour,
                                           out string[] Hours, out int[] Accepted, out int[] Refused)
     {
         int hours = 1 + int.Parse(EndHour) - int.Parse(StartHour);

         Hours = new string[hours];
         Accepted = new int[hours];
         Refused = new int[hours];

         int result = 0;

         for (int i = 0; i < hours; i++)
         {
             Accepted[i] = 0;
             Refused[i] = 0;
             Hours[i] = string.Format("{0:00}", int.Parse(StartHour) + i);
         }

         const string sql = @"SELECT COUNT('x') AS numVisits, visit_Status as Status, SUBSTRING(visit_Time,1,2) as visitHour
                              FROM visits
                              WHERE visit_Date BETWEEN @startdate AND @enddate
                              AND SUBSTRING(visit_Time,1,2) between @StartHour and @EndHour
                              GROUP BY SUBSTRING(visit_Time,1,2), visit_Status";

         var hourstable = new DataTable();

         using (var conn = new MySql.Data.MySqlClient.MySqlConnection(connectionstring))
         {
             conn.Open();

             var cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn);

             var ds = new DataSet();
             var parameter = new MySql.Data.MySqlClient.MySqlParameter("@startdate", MySql.Data.MySqlClient.MySqlDbType.DateTime);
             parameter.Direction = ParameterDirection.Input;
             parameter.Value = startdate;
             cmd.Parameters.Add(parameter);

             var parameter2 = new MySql.Data.MySqlClient.MySqlParameter("@enddate", MySql.Data.MySqlClient.MySqlDbType.DateTime);
             parameter2.Direction = ParameterDirection.Input;
             parameter2.Value = enddate;
             cmd.Parameters.Add(parameter2);

             var parameter3 = new MySql.Data.MySqlClient.MySqlParameter("@StartHour", MySql.Data.MySqlClient.MySqlDbType.DateTime);
             parameter3.Direction = ParameterDirection.Input;
             parameter3.Value = StartHour;
             cmd.Parameters.Add(parameter3);

             var parameter4 = new MySql.Data.MySqlClient.MySqlParameter("@EndHour", MySql.Data.MySqlClient.MySqlDbType.DateTime);
             parameter4.Direction = ParameterDirection.Input;
             parameter4.Value = EndHour;
             cmd.Parameters.Add(parameter4);

             var da = new MySql.Data.MySqlClient.MySqlDataAdapter(cmd);

             da.Fill(ds);
             try
             {
                 hourstable = ds.Tables[0];

             }
             catch
             {
                 hourstable = null;
             }
         }
         if (hourstable != null)
         {
             for (int i = 0; i < hourstable.Rows.Count; i++)
             {
                 if (int.TryParse(hourstable.Rows[i]["numVisits"].ToString(), out result) && int.TryParse(hourstable.Rows[i]["visitHour"].ToString(), out hours))
                 {
                     hours -= int.Parse(StartHour);
                     if (hourstable.Rows[i]["Status"].ToString().ToUpper() == "ACCEPTED")
                     {
                         Accepted[hours] = result;
                     }
                     else
                     {
                         Refused[hours] = result;
                     }
                 }

             }

         }

     }

и я вызываю вышеуказанный метод в приведенном ниже коде ... и именно здесь я представляю данные в элементах управления диаграммы ....

    private void KpiHourlAttendenceForm_Load(object sender, EventArgs e)
    {
        Drawkpihourlyattendence(dtpStartDate.Value, dtpEnddate.Value);
    }

    public void Drawkpihourlyattendence(DateTime startdate, DateTime enddate)
    {
        try
        {
            KpiHourlyattaendencechart.Series.Clear();

            Series acceptedSeries = KpiHourlyattaendencechart.Series.Add("Accepted");
            Series rejectedSeries = KpiHourlyattaendencechart.Series.Add("Refused");

            string[] xValues;
            int[] yValues;
            int[] yValues2;

            KpiData.Hourlyattendence(startdate, enddate, "06", "22", out xValues, out yValues, out yValues2);

            //blah
           //blah
           ///blah
       }
       catch(FormatException e)
      {
            Console.WriteLine(e.Message);

       }    

получено исключение: формат Exception String не был распознан как допустимый DateTime.

Может ли кто-нибудь помочь с этим .....

Большое спасибо заранее ...

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

Измените начальный / конечный час на целочисленные типы параметров SQL и приведите SUBSTRING (visit_Time, 1,2) к целому числу в строке, которую вы делаете BETWEEN @StartHour и @ EndHour

1 голос
/ 09 сентября 2011

StartHour и EndHour не DateTime.

Кроме того, как заметил @Ryan Wright, ваш фильтр between не будет работать должным образом со строками.

0 голосов
/ 09 сентября 2011

Я думаю, вам нужно изменить тип параметра для @StartHour и @EndHour, потому что они строковые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...