2012-05-02 5 views
0

Я создал проект службы VS2010 для Windows. В нем я вызываю метод Microsoft.SqlServer.Management.Smo.Database.ExecuteWithResults (выражение). В моем сценарии выражение содержит недопустимый SQL, поэтому вызов завершается с исключением, как и ожидалось.Исключение SQL SMO приводит к тому, что блок finally должен быть пропущен?

Что не ожидал, что метод вызывается в Try /, наконец, блок, но, наконец, блок никогда не выполняется:

try { database.ExecuteWithResults(invalid-sql) } 
finally { // code here is NOT executed } 

Однако, если я изменить его на TRY/улова /, наконец, блок, вызывается код catch и finally.

try { database.ExecuteWithResults(invalid-sql) } 
catch(Exception) { // code here is executed fine } 
finally { // as is this code } 

Я что-то упустил? Разве окончательный блок никогда не должен выполняться?

ответ

0

В Visual Studio перейдите к Debug | Исключения ..., вы можете попробовать проверить исключения на разных уровнях, чтобы их «бросили». Прежде, чем я увидел это только в некоторых сторонних DLL win32, их можно было поймать, проверив больше типов исключений в этом диалоговом окне.