【问题标题】:how to compare date from access database with date in texbox in vb如何将访问数据库中的日期与vb中文本框中的日期进行比较
【发布时间】:2012-03-30 19:59:04
【问题描述】:

当我比较访问数据库中的日期和 vb 文本框中输入的日期时,我的 sql 语句返回 null。在我看来,这两个日期的格式不同,所以从 select 语句返回 null 但我该怎么做。请帮忙。我的选择如下:

("SELECT farmer_num as [FARMER'S NUMBER], " & _
                                         "farmer_name as [FARMER'S NAME], farmer_village     as [VILLAGE], farmer_phone as [PHONE NUMBER], reg_date as [REGISTRATION DATE], " & _
                                         "farmer_centre as [CENTRE] FROM farmer where reg_date =" & TextBox.Text.ToString, cnn)`

【问题讨论】:

    标签: sql vb.net ms-access


    【解决方案1】:

    第一点,您不应该在您的 SQL 中加入受信任的用户输入。它使您的代码非常容易受到SQL Injection 的攻击,这是目前利用最严重且易于预防的漏洞。

    您应该改用parameterized queries

    如果幸运的话,仅此一项就可以解决您的问题。如果您使用的是参数化查询,那么数据类型转换几乎是“神奇地”发生的。您无需担心。

    这里有一个专门处理 Access 数据库和 .NET 的文章的链接,可以帮助您:http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

    【讨论】:

    • 非常感谢。我刚刚阅读了链接并添加了##,现在一切都很好。
    【解决方案2】:

    给定的 regdate 是 date 类型。

    在某个地方,您将日期显示在文本框中作为代码中某处的日期,然后使用参数化查询和日期,而不是它的格式化字符串版本作为参数值。

    除了@David 提到 SQl 注入问题之外,请始终记住 '8/6/2012' 是字符串而不是日期。

    【讨论】:

    • 谢谢。我正在使用参数化查询,员工很棒
    【解决方案3】:

    这样使用..

    ("SELECT farmer_num as [FARMER'S NUMBER], " & _ "farmer_name as [FARMER'S NAME], farmer_village as [VILLAGE], farmer_phone as [PHONE NUMBER], reg_date as [REGISTRATION DATE], " & _ "farmer_centre as [CENTRE] FROM farmer where convert(datetime, '" & TextBox.Text.ToString &"', 101)";
    

    如果 TextBox 格式不同于 mm/dd/yyyy,您可能需要更改第二个参数转换功能。

    string concat 不是使用参数化 sql 的正确解决方案。尝试使用 SqlCommand 和 SqlParameter。

    【讨论】:

    • 我刚刚在TextBox.Text.ToString 周围添加了##,它正在工作。让我也试试你的想法。谢谢你的回复
    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2019-03-12
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多