2

我有一个返回所需值的选择语句,但是当我将操作系统日期从英语(美国)更改为英语(英国)时,它现在返回 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是组合框中的日期值,brought_date是数据库日期。这种比较会不会有问题where brought_date=#" & dtComb.Text.Trim?我正在使用vb,并且数据库正在访问

4

1 回答 1

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 中的 ? 顺序匹配)。

于 2012-05-09T05:19:57.847 回答