2012-05-08 11 views
2

我有一个select语句返回所需的值,但是当我将操作系统日期从英语(美国)改为英语(英国)时,它现在返回null。我相信这个问题与日期有关,因为在查询中选择数据库中的日期与组合框中的日期相同的值,但我不知道我还能做什么。它几乎看起来像combox和数据库中的日期不一样,但组合框中的日期实际上是从数据库中检索出来的,并且直到我更改了系统日期格式才正确返回值。有人可以告诉我们可以做些什么以及为什么在更改系统日期后出现这种情况?这是我的选择命令:在vb中查询访问数据库在更改操作系统日期后返回null

cmd4.CommandText = _ 
    "SELECT sum(brought_qtty), recieved_qtty from brought_coffee, centre_weigh where brought_date=#" & _ 
    dtComb.Text.Trim & "#" & _ 
    "and crop_year=" & Today.Year & "and brought_date=weigh_date and weigh_centre='" & _ 
    cenComb.Text.Trim.Substring(0, 2) & "' group by recieved_qtty"` 

dtComb.Text是从ComboBox日期值和brought_date是数据库的日期。难道这个比较where brought_date=#" & dtComb.Text.Trim有问题吗?我使用VB和数据库访问

回答

1

为了避免这个问题,你需要处理适当的数据类型。在你的情况下,你需要传递/设置参数作为日期类型,而不是字符串。因此,定义适当类型的参数(OleDbParameter)并将其传递给查询(OleDbCommand)。

一些例子可以在这里找到:http://msdn.microsoft.com/en-US/library/system.data.oledb.oledbparameter(v=vs.90).aspx

事情是这样的:

... 
cmd4.CommandText = "SELECT sum(brought_qtty), recieved_qtty from brought_coffee, centre_weigh where brought_date = ? and crop_year = ? and brought_date = weigh_date and weigh_centre = ? group by recieved_qtty" 

cmd4.Parameters.Add("p1", OleDbType.Date).Value = Convert.ToDateTime(dtComb.Text.Trim()) 
cmd4.Parameters.Add("p2", OleDbType.Integer).Value = Today.Year 
cmd4.Parameters.Add("p3", OleDbType.VarChar).Value = cenComb.Text.Trim.Substring(0, 2) 

... 

请注意,该参数的名字没有关系,但是,赋予它们的顺序不(应该匹配SQL中的?的顺序)。

+0

谢谢@Turman。您可以举例说明如何将参数设置为数据类型时的代码。我之前没有这样做过 – ken

+0

非常感谢。它现在工作得很好。我用你说的参数化查询,我设置它们的数据类型,现在都很酷 – ken

+0

很高兴听到它的工作! –