2016-06-20 24 views
0

dateTimePickerに入力された日付に基づいてgridviewでデータを取得しようとしています。しかし、私がequals関数を使用して2つの文字列を比較した場合、null参照ランタイムエラーが発生しています。DateTimePickerから日付を取得してデータベースからデータを取得する

ReportFrom.cs

private void button1_Click(object sender, EventArgs e) 
{ 
     string date = dateTimePicker.Value.ToShortDateString(); 
     reportLayer.MakeDailyReport(date, dataGridViewReport); 
} 

ReportLayer.cs

private SqlConnection con = new SqlConnection("Data Source=CHAMP-PC;Initial Catalog=ProcessSale;Integrated Security=True"); 
private SqlCommand cmd; 
private SqlDataAdapter adapt; 

public void MakeDailyReport(string givenDate, DataGridView view) 
{ 
    try 
    { 
     con.Open(); 

     DataTable dt = new DataTable(); 

     cmd = new SqlCommand("SELECT Date FROM FinalSales where Date = @datePicker", con); 
     cmd.Parameters.AddWithValue("@datePicker", givenDate); 

     cmd.ExecuteNonQuery(); 

     object dateObject = cmd.ExecuteScalar(); 

     string dateObjectstring = Convert.ToString(dateObject); 
     string givenDateString = Convert.ToString(givenDate); 
     // string DBdate = dateObject.ToString(); 

     if (dateObject.Equals(givenDate)) 
     { 
      adapt = new SqlDataAdapter("SELECT Date FROM FinalSales where Date = " + givenDate + "", con); 

      if (adapt != null) 
      { 
       adapt.Fill(dt); 

       view.DataSource = dt; 
      } 
      else 
      { 
       MessageBox.Show("No Record found againts that date"); 
       con.Close(); 
      } 
     } 
     else 
     { 
      con.Close(); 
     } 
    } 
    catch (Exception a) 
    { 
     MessageBox.Show(a.Message); 
     con.Close(); 
    } 
} 
+1

ここで、null参照は発生していますか? if condiationの場合は – Takarii

+0

です。 –

+1

明らかに、 'dateObject'はnullです。その理由を理解する必要があります。直接実行すると、最初のクエリは何を返しますか? – ChrisF

答えて

1

はこちらをご覧: さらにHandling ExecuteScalar() when no results are returned

:等号(への呼び出しには注意してください) 。現在、2本の弦を と比較しています。 1つはデフォルトのToString()を持つShortDate値1を持つものです。

イベント日付が等しい場合、falseを返す可能性があります。

もっと良い解決策は、DateTimeとして両方の値を処理し、==演算子を使用することです。

トーマス

+0

ありがとうございます。私は1916年6月19日に入力フェリッドに入ろうとしていますが、今、私は "Jun"の無条件の名前を取得しています。 –

+0

これはあなたが設定したCulureの問題である可能性が最も高いです。 参照:https://msdn.microsoft.com/en-us//library/5hh873ya(v=vs.90).aspx –

関連する問題