【问题标题】:Passing date as parameter for query in visual basics将日期作为参数传递给 Visual Basics 中的查询
【发布时间】:2011-09-17 18:01:59
【问题描述】:

我想在 vb 中传递一个日期作为参数来查询表中的数据。 如果我硬核查询中的值,它对我来说很好,但是如果我将它作为参数传递给查询,就像我从编辑文本中获取数据并尝试将其作为参数发送一样,这不起作用。

SELECT * 
 FROM VehicleAnalogParamDownload2
 WHERE Vapd2_Date between 'From_date.Text' And 'To_Date.Text'

谢谢

【问题讨论】:

    标签: sql database vb.net visual-studio-2008


    【解决方案1】:

    不要将值直接嵌入到 SQL 语句中。

    改为使用参数化查询。这样您就不必担心不同的日期/时间格式,并且对于其他参数,您可以避免 SQL 注入攻击。您的 SQL 将类似于:

    SELECT * FROM VehicleAnalogParamDownload2
    WHERE Vapd2_Date between @FromDate And @ToDate
    

    然后您会以编程方式填写 @FromDate 和 @ToDate 参数值。

    有关示例,请参阅SqlCommand.Parameters 的文档。

    【讨论】:

    • thanku jon skeet,我得到了答案,同样的问题也可以通过这种方式解决 "SELECT * WHERE Vapd2_Date between '" & From_date.Text & "' And '" & To_Date.Text & "'"
    • @Datta:那不是你应该怎么做。这会让您容易受到 SQL 注入攻击、格式问题等的影响。不要这样做。
    • 哦,好吧,乔恩,谢谢...我是新手,所以我正在尝试所有这些反复试验的方法,再次感谢乔恩。
    【解决方案2】:

    在vb中

    dim str as string
    
    str="SELECT * FROM VehicleAnalogParamDownload2 WHERE Vapd2_Date between" & 
         From_date.Text & "' And  '"& 'To_Date.Text'"
    

    【讨论】:

    • 这会引发 SQL 注入攻击。代码和数据应该分开。
    • @vikky:嗯,这将是一个开始,可能就足够了......但是你还需要担心不同的日期格式。但这是错误的方法:使用参数化查询将代码与数据分开。
    • 好的,谢谢,记住这件事以备日后工作,再次感谢
    • @vikky:好计划 :) 如果您搜索“sql injection”,您会发现很多信息:)
    猜你喜欢
    • 2019-11-19
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多