簡體   English   中英

如何獲得特定月份和年份的所有條目?

[英]How do I get all the entries for a certain month and year?

我正在嘗試做

var dt = DateTime.Now.ToString();

string query = "SELECT * FROM Gigs where Date >= '"+dt+"';";

它似乎可以工作-除非它能獲得未來幾個月的條目

然后我做

var dt = DateTime.Now.AddMonths(3).ToString();

string query = "SELECT * FROM Gigs where Date >= '"+dt+"';";

而且我得到了意外的結果

如果今天是1月1日,我想獲得一月的所有條目,但二月的卻沒有。

這是只讀數據,與SQL注入無關

首先,為什么需要在C#中計算日期並將其傳遞給SQL查詢? 您可以使用DATEADDGETDATE()來避免這種情況:

--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));
                    }
                }
            }

關於秒的更新 :看來您確實希望將來獲得查詢。

更新#2 :即使您不擔心SQL注入(但一定要擔心),也應該使用參數化查詢,因為框架將處理日期時間格式和轉換。 否則,它可能會在您的計算機上運行,​​但無法在其他計算機/產品上運行。

如果要將日期轉換為字符串,請確保您的區域設置使用不同的區域設置時不會為sql server返回不同的日期。 6月5日對您而言可能是2015年5月6日,但是如果您在en-us中將它傳遞到sql-server中,它將被解釋為5月6日。

對於SQL Server,從日期到字符串的轉換應始終使用通用格式yyyy-MM-dd進行,在大多數軟件中,無論區域設置如何,都不會將其解釋為錯誤。

如果按照建議的方式使用SqlParameters,則不必擔心這些不匹配,因此可以使用SqlParameter的另一個+。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM