繁体   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