VB.NET 使用行部分匹配
VB.NET using row partial match
当我在第一个文本框中写下单词 (size) 时
我的字典应用了访问数据库中的这一行:
然后在第二个文本框中写入(large-big-huge)
但我正在尝试做相反的事情,例如搜索(大)
程序在第二个文本框中给出(大小)
但我必须写 (large-big-huge) 来应用前一行
如何使用带有(-)标记的数据库的部分匹配?
函数代码:
Function argetword(ByVal content As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter("SELECT * FROM [Words]", connectionString)
Using tbl As New DataTable
If adp.Fill(tbl) > 0 Then
For Each row As DataRow In tbl.Rows
content = System.Text.RegularExpressions.Regex.Replace(content, row.Item("values"), row.Item("idom"), System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Next
End If
End Using
End Using
Return content
Catch ex As Exception
MsgBox(ex.Message)
Return String.Empty
End Try
End Function
翻译按钮代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = argetword(TextBox1.Text)
补充信息:
编辑代码:
Function argetword(ByVal content As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter("SELECT English FROM [Words] WHERE Arabic LIKE '%" & content & "%'", connectionString)
Using tbl As New DataTable
If adp.Fill(tbl) > 0 Then
For Each row As DataRow In tbl.Rows
content = System.Text.RegularExpressions.Regex.Replace(content, row.Item("Arabic"), row.Item("English"), System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Next
End If
End Using
End Using
Return content
Catch ex As Exception
MsgBox(ex.Message)
Return String.Empty
End Try
End Function
数据库图片:
错误消息的快照:
您似乎获得了所有值,然后遍历每个值以检查一列是否与输入相匹配 -- 对于您正在尝试做的事情(无论如何我认为)这似乎不必要地复杂。
为什么不更改 select 声明 -
"SELECT values FROM Words WHERE idom = '" & content & "'"
然后反过来-
"SELECT idom FROM Words WHERE values LIKE '*" & content & "*'"
"Like"关键字returns任何包含内容的值,百分号表示单词前后可以有任何内容,它仍然匹配
如果您打算按现在的方式进行操作,则可以使用 string.Contains 函数查看是否在任一列中找到内容。
If row.item("values").contains(content) orelse row.item("idom").contains(content)
等等
当我在第一个文本框中写下单词 (size) 时
我的字典应用了访问数据库中的这一行:
然后在第二个文本框中写入(large-big-huge)
但我正在尝试做相反的事情,例如搜索(大)
程序在第二个文本框中给出(大小)
但我必须写 (large-big-huge) 来应用前一行
如何使用带有(-)标记的数据库的部分匹配?
函数代码:
Function argetword(ByVal content As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter("SELECT * FROM [Words]", connectionString)
Using tbl As New DataTable
If adp.Fill(tbl) > 0 Then
For Each row As DataRow In tbl.Rows
content = System.Text.RegularExpressions.Regex.Replace(content, row.Item("values"), row.Item("idom"), System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Next
End If
End Using
End Using
Return content
Catch ex As Exception
MsgBox(ex.Message)
Return String.Empty
End Try
End Function
翻译按钮代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = argetword(TextBox1.Text)
补充信息:
编辑代码:
Function argetword(ByVal content As String) As String
Try
Using adp As New OleDb.OleDbDataAdapter("SELECT English FROM [Words] WHERE Arabic LIKE '%" & content & "%'", connectionString)
Using tbl As New DataTable
If adp.Fill(tbl) > 0 Then
For Each row As DataRow In tbl.Rows
content = System.Text.RegularExpressions.Regex.Replace(content, row.Item("Arabic"), row.Item("English"), System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Next
End If
End Using
End Using
Return content
Catch ex As Exception
MsgBox(ex.Message)
Return String.Empty
End Try
End Function
数据库图片:
错误消息的快照:
您似乎获得了所有值,然后遍历每个值以检查一列是否与输入相匹配 -- 对于您正在尝试做的事情(无论如何我认为)这似乎不必要地复杂。
为什么不更改 select 声明 -
"SELECT values FROM Words WHERE idom = '" & content & "'"
然后反过来-
"SELECT idom FROM Words WHERE values LIKE '*" & content & "*'"
"Like"关键字returns任何包含内容的值,百分号表示单词前后可以有任何内容,它仍然匹配
如果您打算按现在的方式进行操作,则可以使用 string.Contains 函数查看是否在任一列中找到内容。
If row.item("values").contains(content) orelse row.item("idom").contains(content)
等等