我想做
var dt = DateTime.Now.ToString();
string query = "SELECT * FROM Gigs where Date >= '"+dt+"';";
Run Code Online (Sandbox Code Playgroud)
它似乎工作 - 除了它获得未来几个月的条目
然后我做
var dt = DateTime.Now.AddMonths(3).ToString();
string query = "SELECT * FROM Gigs where Date >= '"+dt+"';";
Run Code Online (Sandbox Code Playgroud)
我得到的结果与预期的相同
如果今天是1月1日,我想获得1月份的所有参赛作品,但是2月份没有.
这是只读数据,不关心SQL注入
首先,为什么需要在C#中计算日期并将其传递给SQL查询?您可以使用DATEADD并GETDATE()避免这种情况:
--Will get three months before:
select DATEADD(MONTH, 3, GETDATE())
Run Code Online (Sandbox Code Playgroud)
其次,你将来有三个月的时间.你确定你不想使用-3:
var dt = DateTime.Now.AddMonths(-3).ToString();
Run Code Online (Sandbox Code Playgroud)
第三:使用参数化查询,这里是示例:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关第二个的更新:看起来您确实希望将来获得查询.
更新#2:即使您不关心SQL注入(但必须如此),您应该使用参数化查询,因为框架将处理日期时间格式和转换.否则它可能适用于您的机器,但不适用于其他机器/生产.