2011-09-09 17 views
0

として認識されませんでしたこんにちは、私は値を取得するためのメソッドを持つデータベースを形成し、チャートコントロールでこれらの値を表す。..書式の例外:文字列が有効なDateTimeの

と、これは方法です...

 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); 

     }  

は、例外が発生しました:F ormat例外文字列が有効なDateTimeとして認識されませんでした。

が.....この上の任意の1 PLSのに役立つだろう事前に

多くのおかげで...

答えて

0

私は、彼らが文字列であるため、あなたが@StartHour@EndHourのためのパラメータの型を変更することがあると思います。 SQLのパラメータの型を整数へ

1

変更開始/終了時、あなたはあなたの@StartHourと@EndHour

BETWEEN
1

StartHourEndHourDateTimeていないん行の整数にSUBSTRING(visit_Time、1,2)をキャスト。

さらに、@ Ryan Wright氏の指摘したように、betweenフィルタは文字列で期待通りに動作しません。

関連する問題