База данных пытается преобразовать значение из того, что дает DateTime.ToString
... Вы действительно хотите верить, что .NET на вызывающем компьютере и SQL Server используют точно такой же формат? Это звучит хрупко для меня.
Избегайте этого, не помещая значение непосредственно в SQL, во-первых, используйте параметризованный запрос . Это не только позволяет избежать проблем с конвертацией, но также (что не менее важно) позволяет избежать атак SQL-инъекций .
Пример кода:
DateTime start = DateTime.Now;
DateTime end = start.AddDays(3);
string sql = @"
SELECT * FROM Forecast
WHERE City = @City AND Date BETWEEN @StartDate AND @EndDate";
// Don't forget to close this somewhere. Why not create a new connection
// and dispose it?
Con.Open();
using (SqlCommand command = new SqlCommand(sql, Con))
{
command.Parameters.Add("@City", SqlDbType.NVarChar).Value = city;
command.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = start;
command.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = end;
using (SqlDataReader reader = command.ExecuteReader())
{
int i = 0;
while (reader.Read())
{
//do something
i++;
}
}
}