【问题标题】:Getting data from database by getting date from DateTimePicker通过从 DateTimePicker 获取日期从数据库中获取数据
【发布时间】:2016-10-21 14:15:56
【问题描述】:

我正在尝试根据 dateTimePicker 中输入的日期在 gridview 中获取数据。但是,在我使用equals 函数比较两个字符串的情况下,我得到空引用运行时错误。

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

【问题讨论】:

  • 空引用出现在哪里?
  • 显然dateObject 为空。你需要弄清楚为什么会这样。如果直接运行,您的第一个查询会返回什么?
  • 请错误地提及为什么我将 dateObject 设为 null。
  • SQL Injection alert - 你应该将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入

标签: c# sql sql-server


【解决方案1】:

看看这里: Handling ExecuteScalar() when no results are returned

另外:小心调用 Equals()。目前您正在比较 两个字符串。一个具有 ShortDate 值 一个具有默认 ToString()。

如果日期相等,则事件,这可能返回 false。

更好的解决方案是将这两个值都处理为 DateTime 并使用 == 运算符。

托马斯

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多