VS2010 Windows サービス プロジェクトを作成しました。その中で、メソッド Microsoft.SqlServer.Management.Smo.Database.ExecuteWithResults(expression) を呼び出します。私のシナリオでは、式に無効な SQL が含まれているため、期待どおりに呼び出しが失敗して例外が発生します。
メソッドが try/finally ブロック内で呼び出されることは想定されていませんが、finally ブロックは決して実行されません。
try { database.ExecuteWithResults(invalid-sql) }
finally { // code here is NOT executed }
ただし、それを try/catch/finally ブロックに変更すると、catch コードと finally コードの両方が呼び出されます。
try { database.ExecuteWithResults(invalid-sql) }
catch(Exception) { // code here is executed fine }
finally { // as is this code }
ここで何か不足していますか?finally ブロックは常に実行されるべきではありませんか?