3

vb.net と Oracle データベースにプロジェクトがあります。Oracle でユーザー パスワードの有効期限が切れると、Oracle 例外が発生します。私はその例外を処理します (ChangePassword フォームを開いてパスワードを変更します) が、エラーが表示されたときに実行する準備ができていた手順を失っています:
例:

  Try
            conn = New OracleConnection
            conn.ConnectionString = gApp.ConnectString
            conn.Open()

          'Let's say that error appears here, I want to retun here after password has been changed

            cmd.Connection = conn
            cmd.CommandText = "Delete_Transaction"
            cmd.CommandType = CommandType.StoredProcedure
            OracleCommandBuilder.DeriveParameters(cmd)
            cmd.Parameters("in_transaction_id").Value = TransactionId
            cmd.ExecuteNonQuery()
            conn.Close()


        Catch ex As OracleException
           'PseudoCode:  if error is PasswordExpired->open the ChengePassForm...blah,blah
           'is handled by a Error class that i have
        Finally
            If Not conn Is Nothing Then
                conn.Dispose()
            End If
        End Try

主な問題は、問題がコードのどこにでも現れる可能性があることです。つまり、さまざまな手順、さまざまな形式などです。
したがって、一般的な解決策が必要です。実際、これにアプローチするための正しいロジックを想像することさえできませんか?. 誰か私に方向を教えてもらえますか?

4

2 に答える 2

2

を取る関数を作ることができますAction(Of OracleCommand)

ブロックでデリゲートを呼び出しTry Catch、パスワードが変更された場合は、アクションを再度呼び出して、正しいパスワードでコードを再実行します。

この関数をラムダ式で呼び出します。
ラムダ式のすべてが複数回実行される可能性があることに注意してください。

于 2013-02-25T15:25:03.347 に答える
1

ネストされた try catch ステートメントを使用します。

Try
    Try
        conn = New OracleConnection
        conn.ConnectionString = gApp.ConnectString
        conn.Open()

        'Let's say that error appears here, I want to retun here after password has been changed
    Catch ex1 As OracleException
       'PseudoCode:  if error is PasswordExpired->open the ChengePassForm...blah,blah
       'is handled by a Error class that i have
    Catch ex2 As Exception
        ' throw ex2 to be handled by the parent try catch
    End Try

    cmd.Connection = conn
    cmd.CommandText = "Delete_Transaction"
    cmd.CommandType = CommandType.StoredProcedure
    OracleCommandBuilder.DeriveParameters(cmd)
    cmd.Parameters("in_transaction_id").Value = TransactionId
    cmd.ExecuteNonQuery()
    conn.Close()


Catch ex As Exception
   'PseudoCode:  if error is PasswordExpired->open the ChengePassForm...blah,blah
   'is handled by a Error class that i have
Finally
    If Not conn Is Nothing Then
        conn.Dispose()
    End If
End Try
于 2013-02-25T15:28:41.113 に答える