我在Visual Basic中有一个函数
我希望能够在发现事件时突破IF语句。
Private Sub GetAllPrograms2()
ListBox4.Items.Clear()
Dim moReturn As Management.ManagementObjectCollection
Dim moSearch As Management.ManagementObjectSearcher
Dim mo As Management.ManagementObject
Dim r As New Regex("(\bJava\S*|\bARR\S*|\bMicrosoft SQL Server 2\S*|\bMySQL\S*|\bPHP\S*|\bWeb C\S*|\bSmarter\S*)")
moSearch = New Management.ManagementObjectSearcher("Select * from Win32_Product")
moReturn = moSearch.Get
For Each mo In moReturn
If r.IsMatch(mo("Name").ToString) Then
ListBox4.Items.Add(mo("Name").ToString)
End If
Dim s As New Regex("(\bSQL Server 2\S*)")
If s.IsMatch(mo("Name").ToString) Then
If mo("Name").ToString = "Microsoft SQL Server 2012" Then
RichTextBox1.Text += "Microsoft SQL 2012 was found" + vbCrLf
ElseIf mo("Name").ToString = "Microsoft SQL Server 2008" Then
RichTextBox1.Text += "Microsoft SQL 2008 was found" + vbCrLf
ElseIf mo("Name").ToString = "Microsoft SQL Server 2005" Then
RichTextBox1.Text += "Microsoft SQL 2005 was found" + vbCrLf
ElseIf mo("Name").ToString = "Microsoft SQL Server 2000" Then
RichTextBox1.Text += "Microsoft SQL 2000 was found" + vbCrLf
End If
End If
Next
End Sub
所以代码正在做的是寻找“Microsoft SQL Server 2”的每个实例,它也在寻找其他项目,但我只关心“Microsoft SQL Server 2”。
如果发现“Microsoft SQL Server 2”,如果将进入另一个IF语句并查找Microsoft SQL Server 2000,Microsoft SQL Server 2005,Microsoft SQL Server 2008或Microsoft SQL Server 2012
将尝试构建的报告输出到richtextbox中的任何一个。
代码执行正常。但是,当它找到多个程序名时,有时使用SQL可能会发生10到20次。它会输出多条罚款线。
例如,它会找到:
“Microsoft SQL Server 2012数据库引擎共享” “Microsoft SQL Server 2012常用文件” 等
它将输出多行
找到了Microsoft SQL 2012 找到了Microsoft SQL 2012 等
我希望能找到一个并继续前进。
我尝试过使用for循环< 1但是由于某些原因我无法获得正确的结果。
任何可以帮助我的人都会很棒。
答案 0 :(得分:1)
如果可能 - 将其限制在原始来源中(例如,在SQL中只返回一个条目暴力SELECT TOP 1
)。如果这不是一个选项,您可以通过VB.NET Exit For语句退出循环
IF sql found
output some text
Exit For
Exit