我有一个包含datetimepicker的winform应用程序。当我选择日期时,它会给出日期销售详细信息。我已经添加了代码来形成加载事件,但是我收到了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 :(得分:3)
出现这种情况有两个原因:
首先,fromDate
或toDate
超出该范围,或(最有可能):
fromDate
无法解析您的某个日期变量(toDate
或TryParse()
)。发生这种情况时,日期设置为C#
的默认0001-01-01
值。
在SQL Server
中,DATETIME
数据类型只能保存从1753-01-01
到9999-12-31
的值,并且传递的0001-01-01
超出范围。< / p>
在执行之前检查要解析的字符串的值。
答案 1 :(得分: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选择器控件,则可以使用DateTimePicker.Value
property访问日期,这将返回实际的DateTime
对象:
DateTime fromDate = dateTimePicker_FromBydateSaleReport.Value;
DateTime toDate = dateTimePicker_ToByDateSaleReport.Value;
答案 2 :(得分:0)
好吧,SqlDbType.DateTime
的值介于1753年1月1日至9999年12月31日之间,因此您应该尝试使用SqlDbType.DateTime2
代替。
此外,没有必要将DateTimePicker.Text
属性解析为DateTime
,因为它已经有一个名为Value
的DateTime属性。
请改为尝试:
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;