[英]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查詢? 您可以使用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));
}
}
}
關於秒的更新 :看來您確實希望將來獲得查詢。
更新#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.