Multiple If Else语句以及如何控制它们

时间:2013-01-14 10:48:07

标签: vb.net

在我的网络应用程序中,我定义了RegexMatchstr。因此,Regex将用于比较其他字符串strMatch,以识别textboxes中找到的任何匹配项。在我的代码中,我将3个字符串定义为matches,以便与str进行比较。还定义了与数据库的连接。以下代码显示了定义:

    Dim r As Regex = New Regex(str2, RegexOptions.IgnoreCase)
    Dim m1 As Match = r.Match(txt1.Text.ToString)
    Dim m2 As Match = r.Match(txt2.Text.ToString)
    Dim m3 As Match = r.Match(txt3.Text.ToString)
    Dim myconn As New SqlConnection(ConnString)

我遇到问题的部分是我有很多if else语句,我无法确定如何正确控制它们的方法如下:

If (m1.Success) AND (m2.Success) AND (m3.Success) Then

     Try
          myconn.Open()
          Dim cmd = New SqlCommand("Update Std SET Title = @param ", myconn)
          cmd.Parameters.Add("@param", Data.SqlDbType.Bit).Value = bit_True
          cmd.ExecuteNonQuery()
          cmd.Dispose()
          myconn.Close()
     Catch ex As Exception
          Response.Write(ex)
          End Try

ElseIf (m2.Success) Then
     Try
          myconn.Open()
          Dim cmd = New SqlCommand("Update Teacher SET In_name = @param ", myconn)
          cmd.Parameters.Add("@param", Data.SqlDbType.Bit).Value = bit_True
          cmd.ExecuteNonQuery()
          cmd.Dispose()
          myconn.Close()
     Catch ex As Exception
          Response.Write(ex)
          End Try

ElseIf (m3.Success) Then
     Try
          myconn.Open()
          Dim cmd = New SqlCommand("Update Std SET std_name = @param ", myconn)
          cmd.Parameters.Add("@param", Data.SqlDbType.Bit).Value = bit_True
          cmd.ExecuteNonQuery()
          cmd.Dispose()
          myconn.Close()
     Catch ex As Exception
          Response.Write(ex)
          End Try
     End If

我期待的代码是:

  1. 检查第一个条件m1.success如果true然后执行第一个 Try阻止,否则False忽略所有{{1}阻止AND移动到下一个条件(m2),然后

  2. 检查第二个条件Try如果m2.success然后执行第二个 true阻止,否则如果Try忽略所有False 1}}阻止AND移动到下一个条件(m3),然后

  3. Try

  4. 也是如此

    因此,这意味着第一个m3.Success块与第一个Try if statement相关,并且只有在条件(m1)为真时才应执行。 m2和m3也是如此。通过这种方式,我将对语句进行动态控制。所以

    (m1.Success) =执行第一个m1阻止。

    Try =执行第二个m2阻止。

    Try =执行第三个m3阻止。

    任何返回Try的条件都将与其False块一起被忽略。

    有关如何动态控制这些条件的任何建议或想法?

3 个答案:

答案 0 :(得分:1)

也许只是这个?

If (m1.Success) Then

    '[...]

End If
If (m2.Success) Then

    '[...]

End If
If (m3.Success) Then

    '[...]

End If

答案 1 :(得分:0)

您可以使用Enum作为标志来控制哪些块将通过使用AND语句进行检查来执行,并且枚举值将是正则表达式成功的结果。

另一个优化是在整个If之前/之后打开/关闭连接,以便稍微提高性能。

答案 2 :(得分:0)

它是一个Web应用程序,所以我假设您已将数据库连接放在连接池或连接管理器中。

定义执行以下操作的抽象类

  1. 匹配某个reg模式(这应该在其子类中被覆盖)
  2. 发生匹配时,请执行以下操作 2.1。从池中获取数据库连接 2.2。对数据库运行某些查询 2.3。将数据库连接返回到池
  3. 返回主逻辑
  4. 您可以在子类中创建所需数量的模式/逻辑,并将它们的实例放在集合(数组或列表)中。收到用户请求后,运行所有实例并让他们进行匹配和数据库查询。