DataTable.select过滤字符串中的双引号

时间:2019-05-24 15:35:32

标签: vb.net

我必须在数据表中搜索。数据表由SQL查询构建。我必须在列中搜索一个值,当我找到该值时,我想返回同一行中其他一些单元格的值。 那行得通。问题是我的搜索字符串也是从数据库中提供的,有时还有一些尺寸(以英寸为单位),双引号使我的搜索混乱。我知道我应该用另一个双引号将双引号转义,但是当我这样做时,即使值正确,筛选器也不返回任何行。

我有一个KeyValuePair(String, String)的列表,并且有一个DataTable搜索到

For Each variable As KeyValuePair(Of String, String) In varset
    Dim temp As New String(String.Format("ShortName ='{0}' AND OldValue='{1}'", variable.Key, variable.Value))
    Dim rows As DataRow() = tab.Select(temp)

    Console.WriteLine(variable.Key + " " + variable.Value)
    If rows.Length = 0 Then
        'returns an error
    Else

    End If
Next

当第一个查询返回搜索值时,例如“¾” NPT ANSI B 1.20.1“,我必须将其转义为”¾“” NPT ANSI B 1.20.1“,但随后进行搜索即使最后的检查告诉我两个字符串都相同也无法正常工作(我知道我不应该相信调试窗口中有关字符串的信息,但是看起来是调试中的字符串进入了过滤器)< / p>

1 个答案:

答案 0 :(得分:0)

用双引号转义双引号是正确的。但是,您显示的英寸标记不是“正常”的ASCII双引号(Unicode \ u0022),因为它在其上显示了更多的曲线或角度,有点像重音符号与撇号不一样。它可以是双质数(Unicode \ u2033)或右双引号(Unicode \ u201d)。如果我将您写的内容复制到MySQL表中,也将找不到该记录。一旦将英寸标记更改为普通的ASCII双引号,它将找到记录。所以有两个明显的选择:

  1. 清理数据库中的数据以对Unicode使用\ u0022 标记。
  2. 从数据库中进行选择以填充DataTable时,请使用必要的适当函数将其替换为 Unicode \ u0022。