[英]How do I write an SQL query in c# to find DateTime?
因此,我在Windows窗體中創建了一個搜索功能,該功能將允許用戶根據他們在文本框中輸入的內容來搜索記錄。 我有工作代碼,用於根據除DateTime之外的每個過濾器查找記錄。 例如:
if (customerID_rb.Checked == true)
{
sqlQuery = "SELECT CustomerID, CustomerName, Telephone, DateAndTime, Status, Description from Calls WHERE CustomerID = " + item;
//'item' is the text in the textbox
UsingCommand(conn, table, sqlQuery);
return table;
}
private static void UsingCommand(SqlConnection conn, DataTable table, string sqlQuery)
{
using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
da.Fill(table);
}
}
這將在“客戶ID”列中顯示包含用戶輸入的文本的記錄。
但是,除了DateTime,我無法完全弄清楚該如何做。 我知道在SQL中鍵入“ WHERE'DateTime = ...”,但是無論我如何嘗試重新編寫查詢字符串,我都無法正常工作。
我得到的錯誤是:'SqlException未處理:在'DateAndTime'附近的期望條件的上下文中指定的非布爾類型的表達式。
碼:
sqlQuery = "SELECT CustomerID, CustomerName, Telephone, DateAndTime, Status, Description from Calls WHERE DateTime DateAndTime = '" + item +"'";
我嘗試過和不使用DateTime並以多個不同的順序進行嘗試,如果有人可以幫助我,將不勝感激!
謝謝
編輯:
好吧...我弄亂了。 我錯誤地認為您將需要DateTime。 但是,我可能會想到,因為如果輸入錯誤的日期和時間會引發異常。 謝謝! :)
您永遠不要將參數連接到SQL字符串中。
它使您容易受到SQL注入攻擊的攻擊 。
它會產生性能問題,因為每個唯一值都會創建一個新的SQL查詢,該查詢具有不同的哈希值,從而破壞了查詢引擎的執行計划緩存機制。
對於日期值,y / m / d,d / m / y或m / d / y字符串格式的順序可能會有所不同,具體取決於當前的區域性設置,OS全球化設置以及數據庫服務器的全球化設置。 如果它們不完全同步,那么您最終可能會產生隨機的怪異現象,例如將1月3日誤認為3月1日。
相反,您應該始終參數化查詢! 該查詢獲取該值的占位符,然后使用單獨的參數添加該值。 我不會在這里給您舉個例子,因為花費很少的時間自己搜索它,並且這里已經有數百篇關於SO的帖子。
您無需指定數據類型DateTime
,只需使用列名寫查詢即可,例如
sqlQuery = "SELECT CustomerID, CustomerName, Telephone, DateAndTime, Status, Description from Calls WHERE columnname = '" + item +"'";
一般來說,最好是添加sql參數,但以字符串格式:
" ... WHERE DateAndTime = '" + item.ToString("yyyyMMdd") +"'"
yyyyMMdd應該可以在所有文化中安全使用。 以上假設,您必須搜索日期,不包括時間。 通常,僅搜索大於或小於的時間。 另外,如果日期字段本身包含時間,而您只想搜索日期:
".... WHERE cast(DateAndTime as date) = '" + item.ToString("yyyyMMdd") +"'"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.