Vb.net,当过滤文本包含%时,如何使用LIKE子句过滤?

时间:2012-02-13 15:45:38

标签: vb.net datagridview

我想过滤datagridview中所有列中的文本。所以我在滤镜文本中使用Like%。但是,我发现文本(我的代码中的strFilter)有时可能包含%。所以它有语法错误。当过滤器文本包含%时,如何使用带有like子句的过滤器?

    Private Sub PassFilter(ByRef dataTable As DataTable, ByVal strFilter As String)
    Try
        Dim dataview As DataView = dataTable.DefaultView
        Dim strExp As String = ""
        For Each col As DataColumn In dataTable.Columns
            If Not String.IsNullOrEmpty(strFilter) Then
                If strExp = "" Then
                    strExp += "[" & col.ColumnName & "]" & " LIKE '%" & strFilter & "%'"
                Else
                    strExp += " OR " & "[" & col.ColumnName & "]" & " LIKE '%" & strFilter & "%'"
                End If
            End If
        Next

        dataview.RowFilter = strExp

    Catch ex As Exception
        ShowMessage("Unable to filter datagridview." + ex.Message)
    End Try


End Sub

2 个答案:

答案 0 :(得分:1)

尝试将%转换为方括号:% - > [%],在应用过滤器之前使用替换。

答案 1 :(得分:0)

这是“正确”的方式 - 使用“转义序列”:

http://msdn.microsoft.com/en-us/library/ms378045.aspx

ResultSet rst =  
  stmt.executeQuery("SELECT col3 FROM test1 WHERE col2  LIKE '\\%moose' {escape '\\'}");

SQL Server中的另一种(非可移植)方式是使用方括号:

ResultSet rst =  
  stmt.executeQuery("SELECT col3 FROM test1 WHERE col2  LIKE '[%]moose'");