質問

IDE = VS7 または 2002

こんにちは、ここで本当に奇妙な問題があります。コードが期待どおりに実行されていないようです。これをデバッガで実行しているのですが、動作が非常に奇妙です。

仮想ディレクトリが ASP.NET 1.0.3705 を使用していることを確認しました。

コードは次のとおりで、デバッガーが実行ステップとして表示するものをコメントで説明します。

try
{
    objConnection.Open();  // STARTS HERE
    objCommand.ExecuteNonQuery();  // DOES NOT THROW EXCEPTION
    int c = 0;  // THIS LINE IS EXECUTED
}
catch (SqlException sqle)
{

    LogError();  // THIS LINE IS NOT EXECUTED
    throw sqle;  // THIS LINE IS EXECUTED AFTER THE int c = 0; 
                 // sqle IS NULL
                 // EXCEPTION IS NOT CAUGHT AND 
                 // EXECUTION CONTINUES IN FINALLY BLOCK
}
finally
{
    // EXECUTES AS EXPECTED FROM HERE ON OUT,
    // AS THOUGH THE throw sqle; DID NOT HAPPEN.
    if (objConnection.State == ConnectionState.Open) objConnection.Close();
}

これまでにこの奇妙な動作を経験した人はいますか?それを修正する方法はありますか?方法を大幅に変更する可能性がありますが、なぜこれが起こっているのかを知りたいと思っています。

sqle が null であるため、スローが期待どおりに動作しないのではないかと思います。しかし、そもそもなぜこのコードブロックに飛びついたのでしょうか?

何度かリロードし、保存して再構築し、デバッガーで実行して、この動作を何度も観察しました。

皆さん、ご協力ありがとうございました!

ではごきげんよう、

グラハム

役に立ちましたか?

解決

待って..コードは例外をスローしないのに、なぜ catch ブロックが実行されないのか疑問に思っていますか?

編集(コメントを参照):

それは本当に信じられないことですね。catch ブロック内の実際の例外が null だったというケースは聞いたことがありません。すでに述べたように、catch ブロック内の最初の行が実行されませんでした。これは私の意見では、例外がまったく存在しなかったという方向を示しています。

昔ながらのデバッグ手法 (Debug.WriteLine) を使用し、デバッガーをスキップしてプログラム フローをチェックしようとしましたか?

私の推測では、例外がスローされる間違った場所を見ているのではないかと思います。あるいはまったく例外がありません。

他のヒント

非常に奇妙な。私はあなたのコードで何が起こっているのかわからないんだけど、私が見た一つのことは、使用されます:

catch (SqlException sqle)
{

    LogError();  // THIS LINE IS NOT EXECUTED
    throw sqle;  // THIS LINE IS EXECUTED AFTER THE int c = 0; 
                 // sqle IS NULL
                 // EXCEPTION IS NOT CAUGHT AND 
                 // EXECUTION CONTINUES IN FINALLY BLOCK
}

あなたが書きたいます:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

例外を再スローする。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top