2017-01-18 3 views
1

У меня есть приложение winform, которое содержит datetimepicker. Когда я выбираю дату, она дает данные о дате продажи. Я также добавил код для формирования события загрузки, но я получаю ошибку переполнения SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.Исключение при использовании

мой код

DateTime fromDate, toDate; 
      DateTime.TryParse(dateTimePicker_FromByDateSaleReport.Text, out fromDate); 
      DateTime.TryParse(dateTimePicker_ToByDateSaleReport.Text, out toDate); 


      SqlDataAdapter da3 = new SqlDataAdapter("SELECT Bill_Date,Name,Item,Item_Code,MRP, Quantity,Amount as Total, Amount_After_Discount as Grand_Total From POS LEFT JOIN Customers ON POS.Customer=Customers.Customer_Id WHERE Bill_Date Between @From AND @To", con); 
      da3.SelectCommand.Parameters.AddWithValue("@From", SqlDbType.DateTime).Value = fromDate; 
      da3.SelectCommand.Parameters.AddWithValue("@To", SqlDbType.DateTime).Value = toDate; 
      DataTable dt3 = new DataTable(); 
      da3.Fill(dt); 
      dgv_ByDateSaleReport.DataSource = dt3; 
     } 

.

+0

Вы можете проездом нуль Дата PARAMS –

+0

ли вы выводите dateTimePicker_FromByDateSaleReport.Text? Что он говорит? Какой формат даты он содержит? – Tyron78

+0

Вам не нужно анализировать значение из сборщика - вы можете просто получить его с помощью [Значение] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker. значение (v = vs.110) .aspx). Не думайте, что это проблема, но это может помочь. –

ответ

1

Это может быть вызвано вашими значениями fromDate и toDate, которые не были правильно проанализированы и, вероятно, содержат первоначальное значение по умолчанию «1/1/0001 12:00:00 AM», которое не будет действительной датой :

DateTime fromDate, toDate; 
DateTime.TryParse(dateTimePicker_FromByDateSaleReport.Text, out fromDate); 
DateTime.TryParse(dateTimePicker_ToByDateSaleReport.Text, out toDate); 

Если вы используете элемент управления DateTime Picker, вы, вероятно, можете получить доступ к дате с помощью DateTimePicker.Value property, который будет возвращать фактический DateTime объекта:

DateTime fromDate = dateTimePicker_FromBydateSaleReport.Value; 
DateTime toDate = dateTimePicker_ToByDateSaleReport.Value; 
3

Это может произойти по одной по двум причинам:

Во-первых, либо fromDate или toDate находится вне этого диапазона, или (скорее всего):

Один из ваших дат переменных (либо fromDate или toDate) не может быть проанализирован с помощью TryParse() , Когда это произойдет, дата устанавливается на значение C# по умолчанию 0001-01-01.

В SQL ServerDATETIME тип данных может содержать только значения от 1753-01-01 до 9999-12-31 и 0001-01-01, которая передается вне диапазона.

Проверьте правильность синтаксического анализа строк перед выполнением.

+2

Или, лучше, не используйте значения строк вообще, и просто получите DateTime, что сборщик [даст вам прямо] (https://msdn.microsoft.com/en-us/library/system.windows. forms.datetimepicker.value (v = vs.110) .aspx)! Приятная психическая отладка между прочим;) –

0

Ну, SqlDbType.DateTime имеет значение от 1 января 1753 года до 31 декабря 9999 года, поэтому вместо этого вы должны использовать SqlDbType.DateTime2.
Кроме того, нет смысла разобрать DateTimePicker.Text на DateTime, так как у него уже есть свойство DateTime, которое называется Value.

Попробуйте вместо этого:

 SqlDataAdapter da3 = new SqlDataAdapter("SELECT Bill_Date,Name,Item,Item_Code,MRP, Quantity,Amount as Total, Amount_After_Discount as Grand_Total From POS LEFT JOIN Customers ON POS.Customer=Customers.Customer_Id WHERE Bill_Date Between @From AND @To", con); 
     da3.SelectCommand.Parameters.Add("@From", SqlDbType.DateTime2).Value = dateTimePicker_FromByDateSaleReport.Value; 
     da3.SelectCommand.Parameters.Add("@To", SqlDbType.DateTime2).Value = dateTimePicker_ToByDateSaleReport.Value; 
     DataTable dt3 = new DataTable(); 
     da3.Fill(dt); 
     dgv_ByDateSaleReport.DataSource = dt3; 
+0

Могу ли я вставить в столбцы с типизированным типом данных с параметрами как cmd4.Parameters.AddWithValue («@ BillDate», dateTimePicker_POS.Text); Я получаю сообщение об ошибке как «Не удалось преобразовать при преобразовании даты и/или времени из символьной строки». – Abhijith

+0

Не видел, чтобы вы использовали 'AddWithValue', изменили его на' Add'. В любом случае, тем более важно, что вам не нужно использовать свойство «Текст» вообще, так как у вас есть свойство «Значение». –

+0

спасибо. Значение свойства помогло мне немного! – Abhijith

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