SQL数据错误:将varchar数据类型转换为日期时间数据类型会导致超出范围的值

我有一个SQL查询返回此错误:

将varchar数据类型转换为日期时间数据类型会导致超出范围的值

这是查询:

POQuery = "SELECT Distinct PurchaseOrders.POrderID, PurchaseOrders.VendorName, PurchaseOrderDetail.ArrDate " + "FROM PurchaseOrders " + "FULL JOIN PurchaseOrderDetail ON PurchaseOrders.POrderID = PurchaseOrderDetail.POrderID " + "WHERE PurchaseOrders.Buyer = @Buyer and ArrDate >= convert(DateTime, '" + datePickerStart.Value.ToString("mm/dd/yyyy") + "') and ArrDate <= convert(DateTime, '" + datePickerEnd.Value.ToString("mm/dd/yyyy") + "')"; 

我正在使用datepicker来挑选日期。

你的问题与文化有关……你永远不应该依赖文化特定的日期时间格式! 否则你必须告诉T-SQL CONVERT函数特定的格式(在你的情况下应该是101)…

试试这个:

 SET LANGUAGE ENGLISH; SELECT CONVERT(datetime, '1/22/2016 9:14:44 AM'); --works GO SET LANGUAGE GERMAN; SELECT CONVERT(datetime, '1/22/2016 9:14:44 AM'); --error GO SET LANGUAGE GERMAN; SELECT CONVERT(datetime, '1/22/2016 9:14:44 AM',101); --works 

最好是使用ISO8601 2016-01-22T18:59:00

或其中一种ODBC格式

 {d'2016-01-22'} {t'18:59:00'} {ts'2016-01-22 18:59:00'} 

这样做,你甚至不必打电话转换…

并且 – 正如其他人指出的那样 – 你应该使用参数而不是连接字符串……