是否可以在dataview.rowfilter中使用2个参数?怎么样?

时间:2011-05-24 12:58:41

标签: vb.net

它适用于1个参数(i_index)但是如果我也使用i_datum,我会收到如下错误:“从字符串转换”park_id = 100“到”Long“类型无效。”

Public Function detail_kalender(ByVal i_index As Int16, ByVal i_datum As Date) As DataRowView
    Dim dv As DataView
    Dim anyrow As DataRowView
    dv = New DataView

    With dv

        .Table = myds.Tables("kalender")
        .AllowDelete = True
        .AllowEdit = True
        .AllowNew = True
        .RowFilter = "park_id = " & i_index And "datum =" & i_datum


    End With
    anyrow = dv.Item(0) 'geeft de eerste rij van de dataview dv

    ' Simple bind to a TextBox control
    dv = mydt_parken.DefaultView
    Return anyrow
    dv.Dispose()
    dv = Nothing

End Function

2 个答案:

答案 0 :(得分:0)

查看行过滤器的代码,它将转换为:

.RowFilter = "park_id = 100datum = something"

注意park_id和下一个字段之间缺少空格。你还需要添加“和”(我认为?)

尝试:

.RowFilter = String.Format("park_id = {0} and datum = {1}", i_index.Tostring, i_datum.ToString)

您可能需要修改此内容以包含撇号,具体取决于您的数据类型(即更改为

... and datum = **'**{1}**'** 

如果是字符串)

编辑:回复你的评论。

查看this page上的一些有用提示。对于日期,请使用#符号。

.RowFilter = String.Format("park_id = {0} and datum = #{1}#", i_index.Tostring, i_datum.ToString)

编辑:响应您的第二条评论(formatException“字符串未被识别为有效的日期时间。”):

这有点棘手。我将列出一个可能的快速解决方案,但绝不是最佳解决方案。

Dim customDateFormat As String = "MM/dd/yyyy hh:mm:ss"
.RowFilter = String.Format("park_id = {0} and datum >= #{1}# and datum <= #{2}#", 
                           i_index.ToString, 
                           New DateTime(i_datum.Year, i_datum.Month, i_datum.Day, 0, 0, 0).ToString(customDateFormat),
                           New DateTime(i_datum.Year, i_datum.Month, i_datum.Day, 23, 59, 59).ToString(customDateFormat))

基本上,当您将日期与数据库中的日期时间进行比较时,您可能想忽略时间? (在此做出假设)。一种方法是将您的数据库数据与您的日期进行比较,确保它在00:00 AM到23:59:59 PM之间。

我已经包含了一个customDateFormat字符串,您可以根据需要进行篡改,以反映您的语言环境。我知道日期常量会忽略语言环境,但我不知道它在RowFilter中的作用是什么,以及数据库语言环境是否对它有任何影响。如果上述操作无效,您可以更改日期格式字符串以匹配您的语言环境,以查看是否有帮助。

答案 1 :(得分:0)

请尝试使用:

.RowFilter = "park_id = " & i_index  & " And datum =" & i_datum