簡體   English   中英

如何在C#中編寫SQL查詢以查找DateTime?

[英]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.

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