0

在我的 Web 应用程序中,我定义了一个Regex,Matchstr. 因此Regex将用于将其他字符串与str和进行比较Match以识别在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忽略所有Try块并移动到下一个条件(m2),则

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

  3. 同样适用m3.Success

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

m1= 执行第一个Try块。

m2= 执行第二个Try块。

m3= 执行第三个Try块。

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

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

4

3 回答 3

1

也许只是这个?

If (m1.Success) Then

    '[...]

End If
If (m2.Success) Then

    '[...]

End If
If (m3.Success) Then

    '[...]

End If
于 2013-01-14T11:05:17.490 回答
0

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

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

于 2013-01-14T10:55:43.623 回答
0

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

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

  1. 匹配某个 reg 模式(这应该在其子类中被覆盖)
  2. 当匹配发生时,执行以下 2.1。从池中获取数据库连接 2.2。针对数据库 2.3 运行某些查询。将数据库连接返回到池
  3. 回到主逻辑

您可以根据需要在子类中创建任意数量的模式/逻辑,并将它们的实例放入集合(数组或列表)中。收到用户请求后,运行所有实例并让它们进行匹配和数据库查询。

于 2013-01-14T11:30:36.537 回答