从DataGridView中提取数据以进行SQL筛选。我如何绕过撇号?

时间:2016-03-15 18:18:26

标签: sql vb.net datagridview rowfilter

这是我的过滤方法。

Public Function Filter(data As DataTable)
    Try
        Dim str As String = "[Name] IN ("
        Dim bs As New BindingSource()
        bs.DataSource = dtMain
        bs.Filter = dtMain.DefaultView.RowFilter
        Dim dv As DataView = CType(bs.List, DataView)
        Dim dt As DataTable = dv.ToTable()

        If dt.Rows.Count = 0 Then
            data.DefaultView.RowFilter = "[Name] = 'NULL'"
            Return 0
        End If

        For Each dr As DataRow In dt.Rows
            str = str + "'" & dr.Item("Name") & "', "
        Next
        str = str.Substring(0, str.Length - 2)
        str = str + ")"
        data.DefaultView.RowFilter = "(" & str & ")"
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
    Return 0
End Function

问题是DataGridView中的一个名称中有一个撇号。所以过滤器命中撇号,认为它是自己的值,然后抛出语法错误,因为它后面没有逗号。我不知道如何解决这个问题,我无法操纵数据。

1 个答案:

答案 0 :(得分:0)

我不是肯定的,但我打赌正确的方法来处理这个问题(如果它的行为与数据库插入的行为相同),是用另一个单引号来逃避单引号。所以在你的DataRow迭代器中,这样的小改动可能是有序的:

For Each dr As DataRow In dt.Rows
  str = str + "'" & dr.Item("Name").Replace("'", "''") & "', "
Next