如何将访问数据库中的日期与vb中文本框中的日期进行比较

时间:2012-03-26 17:05:53

标签: sql vb.net ms-access

当我将来自访问数据库的日期与在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)`

3 个答案:

答案 0 :(得分:2)

首先,您不应该在SQL的可信用户输入中加入竞争。它使您的代码非常容易受到SQL Injection的影响,parameterized queries是受到最多利用且容易被阻止的漏洞。

您应该使用http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access代替。

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

这是一篇专门处理Access数据库和.NET的文章的链接,可以帮助您:{{3}}

答案 1 :(得分:0)

给定的regdate是日期类型。

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

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

答案 2 :(得分:0)

像这样使用..

("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,则可能必须更改第二个参数convert funciton。

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