c#
2014-01-22 6 views 1 likes 
1
DateTime fromDate = dateTimePicker1.Value, toDate = dateTimePicker2.Value; 

string query2 = "select * from Sales where DatePurchased >= '" + fromDate.ToShortDateString() + "' AND DatePurchased <='" + toDate.ToShortDateString() + "'"; 

using (OleDbConnection conn2 = new OleDbConnection(connStr)) 
{ 
    using (OleDbCommand command = new OleDbCommand(query2, conn2)) 
    { 
     command.Connection = conn2; 
     conn2.Open(); 
     OleDbDataReader reader = command.ExecuteReader(); 

     while (reader.Read()) 
     { 
      graphics.DrawString(string.Format("{0:000000}", reader.GetInt32(0)), font, new SolidBrush(Color.Black), startX, startY + offset); 
      graphics.DrawString(reader.GetString(1), font, new SolidBrush(Color.Black), startX+90, startY + offset); 
      graphics.DrawString(reader.GetString(2), font, new SolidBrush(Color.Black), startX + 250, startY + offset); 
      graphics.DrawString(Convert.ToString(reader.GetDouble(3)), font, new SolidBrush(Color.Black), startX + 500, startY + offset); 

      startY += 35; 
     } 
    } 
} 

Я адресность ошибки здесь:запросов для базы данных фильтрации

OleDbDataReader reader = command.ExecuteReader(); 

ошибка

"OleDbException было необработанные: Несоответствие типов данных в выражении критериев."

я не знаю, что делать, мои данные в базе данных находятся в Date/Time. Пожалуйста, помогите

+0

Поместите 'breakpoint' в строке' строки Query2 = "выберите * от продаж, где DatePurchased> =«" + fromDate.ToShortDateString() + "'AND DatePurchased <='" + toDate.ToShortDateString() + "'"; 'и посмотреть, что такое' query2'? –

+0

извините, но я не знаю, как поставить точку останова. Можете ли вы научить меня, как? – user3221836

+0

проверить формат даты ... как насчет «fromDate» и «toDate» в YYYY-MM-DD вместо ToShortDateString() –

ответ

1

Вашего ToShortDateString() не является SQL совместимой строки:

fromDate.ToString("yyyyMMdd") 

даст вам SQL совместимой строку даты.

string query2 = "select * from Sales where DatePurchased >= '" + fromDate.ToString("yyyyMMdd")+ "' AND DatePurchased <='" + toDate.ToString("yyyyMMdd")+ "'"; 

Однако было бы лучше использовать параметризованный запрос.

+0

не работает – user3221836

+0

как я могу использовать параметризованный запрос? – user3221836

+1

для параметризованного запроса см. Это -> http://www.codeproject.com/Tips/231217/Parameters-SqlCommand-vs-OledbCommand-and-OdbcComm –

0

Если фиксированная ваша ошибка попробуйте изменить запрос как

string query2 = "select * from Sales where DatePurchased between " + fromDate.ToShortDateString() + " AND " + toDate.ToShortDateString() + " " 

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

0

Попробуйте это:

string query2 = "select * from Sales where DatePurchased >= '" + fromDate.ToString("yyyy-MM-dd") + "' AND DatePurchased <='" + toDate.ToString("yyyy-MM-dd") + "'"; 

он работал для меня, прежде чем

Смежные вопросы