0

私のWebアプリケーションでは、、、およびを定義しRegexましMatchstr。したがって、は他の文字列をとRegex比較するために使用され、で見つかった一致を識別するために使用されます。私のコードでは、と比較するために3つの文字列が定義されています。データベースへの接続も定義されています。次のコードは定義を示しています。strMatchtextboxesmatchesstr

    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か、すべてのブロックを無視して次の条件(m2)に移動する場合は、true TryFalseTry

  2. 2番目の条件をチェックしてから2番目のブロックを実行するm2.success場合、またはすべてのブロックを無視して次の条件(m3)に移動する場合は、true TryFalseTry

  3. 同じことが言えますm3.Success

したがって、これは、最初のブロックが最初のTryブロックに関連しておりif statement (m1.Success)、条件(m1)が真の場合にのみ実行する必要があることを意味します。m2とm3についても同じことが言えます。このようにして、ステートメントを動的に制御できます。それで

m1=最初のTryブロックを実行します。

m2=2番目Tryのブロックを実行します。

m3=3番目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

Enum をフラグとして使用して、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 に答える