如何获得特定月份和年份的所有条目?

MyD*_*ons -1 c# sql

我想做

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注入

vmg*_*vmg 5

首先,为什么需要在C#中计算日期并将其传递给SQL查询?您可以使用DATEADDGETDATE()避免这种情况:

--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注入(但必须如此),您应该使用参数化查询,因为框架将处理日期时间格式和转换.否则它可能适用于您的机器,但不适用于其他机器/生产.