Невозможно отфильтровать просмотр данных между двумя датами и временем - PullRequest
0 голосов
/ 01 апреля 2020

Добрый день, я пытаюсь отфильтровать сетку данных между двумя datetimepicker.

Я пробовал

public void LoadAllBorrowHistory()
    {
        int i = 0;
        if (cboStatus.Text == "All Records")
        {
            gunaDataGridView1.Rows.Clear();
            cn.Open();
            cm = new SqlCommand("SELECT bb.borrowID,  bb.bookTitle,  bb.studentNum, (s.lastName + ' ' + s.firstName) AS Name, bb.status FROM tblBorrowedBook as bb INNER JOIN tblStudent AS s ON bb.studentID = s.studentID WHERE dateBorrowed BETWEEN '" + dt1.Value + "'AND'" + dt2.Value + "'", cn);
            dr = cm.ExecuteReader();
            while (dr.Read())
            {
                i += 1;
                gunaDataGridView1.Rows.Add(i, dr["borrowID"].ToString(), dr["bookTitle"].ToString(), dr["studentNum"].ToString(), dr["Name"].ToString(), dr["status"].ToString());
            }
            dr.Close();
            cn.Close();
        }
        else
        {
            gunaDataGridView1.Rows.Clear();
            cn.Open();
            cm = new SqlCommand("SELECT bb.borrowID,  bb.bookTitle,  bb.studentNum, (s.lastName + ' ' + s.firstName) AS Name, bb.status FROM tblBorrowedBook as bb INNER JOIN tblStudent AS s ON bb.studentID = s.studentID WHERE status LIKE '" + cboStatus.Text + "%'", cn);
            dr = cm.ExecuteReader();
            while (dr.Read())
            {
                i += 1;
                gunaDataGridView1.Rows.Add(i, dr["borrowID"].ToString(), dr["bookTitle"].ToString(), dr["studentNum"].ToString(), dr["Name"].ToString(), dr["status"].ToString());
            }
            dr.Close();
            cn.Close();
        }
    }

Выдает ошибку

'Преобразование не удалось при преобразовании даты и / или времени из символьной строки.'

Я установил значения даты и времени на DateTime.Now, поэтому я не понимаю, почему я получаю эту ошибку , Пожалуйста помоги.

1 Ответ

0 голосов
/ 01 апреля 2020

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

public void LoadAllBorrowHistory()
    {
        int i = 0;
        if (cboStatus.Text == "All Records")
        {
            gunaDataGridView1.Rows.Clear();
            cn.Open();
            cm = new SqlCommand("SELECT bb.borrowID,  bb.bookTitle,  bb.studentNum, (s.lastName + ' ' + s.firstName) AS Name, bb.dateBorrowed, bb.dueDate, bb.status FROM tblBorrowedBook as bb INNER JOIN tblStudent AS s ON bb.studentID = s.studentID WHERE dateBorrowed BETWEEN @dt1 AND @dt2", cn);
            cm.Parameters.AddWithValue("@dt1", dt1.Value);
            cm.Parameters.AddWithValue("@dt2", dt2.Value);
            dr = cm.ExecuteReader();
            while (dr.Read())
            {
                i += 1;
                gunaDataGridView1.Rows.Add(i, dr["borrowID"].ToString(), dr["bookTitle"].ToString(), dr["studentNum"].ToString(), dr["Name"].ToString(), Convert.ToDateTime(dr["dateBorrowed"]).ToString("MM/dd/yyyy"), Convert.ToDateTime(dr["dueDate"]).ToString("MM/dd/yyyy"),  dr["status"].ToString());
            }
            dr.Close();
            cn.Close();
        }
        else
        {
            gunaDataGridView1.Rows.Clear();
            cn.Open();
            cm = new SqlCommand("SELECT bb.borrowID,  bb.bookTitle,  bb.studentNum, (s.lastName + ' ' + s.firstName) AS Name, bb.dateBorrowed, bb.dueDate ,bb.status FROM tblBorrowedBook as bb INNER JOIN tblStudent AS s ON bb.studentID = s.studentID WHERE status LIKE @status AND dateBorrowed BETWEEN @dt1 AND @dt2", cn);
            cm.Parameters.AddWithValue("@status", cboStatus.Text);
            cm.Parameters.AddWithValue("@dt1", dt1.Value);
            cm.Parameters.AddWithValue("@dt2", dt2.Value);
            dr = cm.ExecuteReader();
            while (dr.Read())
            {
                i += 1;
                gunaDataGridView1.Rows.Add(i, dr["borrowID"].ToString(), dr["bookTitle"].ToString(), dr["studentNum"].ToString(), dr["Name"].ToString(), Convert.ToDateTime(dr["dateBorrowed"]).ToString("MM/dd/yyyy"), Convert.ToDateTime(dr["dueDate"]).ToString("MM/dd/yyyy"), dr["status"].ToString());
            }
            dr.Close();
            cn.Close();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...