Прежде всего, почему вам нужно вычислить дату в C# и передать его в SQL запросе? Вы можете использовать DATEADD
и GETDATE()
, чтобы избежать этого:
--Will get three months before:
select DATEADD(MONTH, 3, GETDATE())
Во-вторых, у вас есть три месяца в будущем. Вы уверены, что вы не хотите использовать -3:
var dt = DateTime.Now.AddMonths(-3).ToString();
Третье: использование параметризованных запросов, вот пример:
using (var connection = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=SSPI;"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "SELECT * FROM [Test].[dbo].[SomeDates] WHERE dt > @MyDate";
var param = new SqlParameter("@MyDate", SqlDbType.DateTime2) { Value = DateTime.Now };
command.Parameters.Add(param);
var result = command.ExecuteReader();
while (result.Read())
{
Console.WriteLine(result.GetDateTime(0));
}
}
}
Update относительно второго: Похоже, что вы хотите чтобы получить запрос в будущем.
Update # 2: Даже если вы не обеспокоены инъекции SQL (но вы должны быть), вы должны использовать параметризованные запросы, так как рамки будут заботиться о форматах даты и времени и преобразования. В противном случае он может работать на вашей машине, но не будет работать на другой машине/производстве.
Вы говорите, что есть строки, в которых есть дата в ближайшие 3 месяца, которые включены в оба набора результатов? Также вы должны рассмотреть использование sql-параметров. – juharr
Две вещи: ** 1. ** Вы получаете даты * позже * указанной даты, а не старше, и ** 2. ** пока вы в безопасности здесь, вы действительно должны всегда использовать параметризованные запросы, иначе вы будете уязвимы для атак SQL-инъекций – LittleBobbyTables
«вы действительно должны всегда использовать параметризованные запросы», это новость для меня, знаете причину, по какой-либо причине? –