Why Use Finally In Try/Catch
Nov 25, 2009OK, I'd like to know the difference between the following two blocks of code:
Block A
Try
Something
[code].....
OK, I'd like to know the difference between the following two blocks of code:
Block A
Try
Something
[code].....
I understand how try-catch works and how try-finally works, but I find myself using those (usually) in two completely different scenarios:
try-finally (or using in C# and VB) is mostly used around some medium-sized code block that uses some resource that needs to be disposed properly.
try-catch is mostly used either
around a single statement that can fail in a very specific way or (as a catch-all) at a very high level of the application, usually directly below some user interface action.
In my experience, cases where a try-catch-finally would be appropriate, i.e., where the block in which I want to catch some particular exception is exactly the same block in which I use some disposable resource, are extremely rare. Yet, the language designers of C#, VB and Java seem to consider this to be a highly common scenario; the VB designers even think about adding catch to using.
Or am I just overly pedantic with my restrictive use of try-catch?
EDIT: To clarify: My code usually looks like this (functions unrolled for clarity):
Try
do something
Aquire Resource (e.g. get DB connection)
Try
[Code]....
which just seems to make much more sense than putting any of the two catches on the same level as finally just to avoid indentation.
If I throw an exception from within a catch, does the finally (from the catch) still execute? i.e.
Try
..some code with an exception in it...
catch ex as Exception
throw new SpecialException("blah blah" & ex.Message, ex)
[code]....
Sometimes I do this and I've seen others doing it too:
VB:
Try
DontWannaCatchIt()
[code].....
Is there some special way to catch exceptions in finally block ?
View 2 RepliesI have a (begginner) question on VB.NET. Is this good code (I mean, is it "bullet proof")?. It seems to work, but I understand the Return is executed AFTER the Finally. So how does it call a method on an allready disposed of object?
[Code]...
I've a class with a timer inside
Private tt As New System.Timers.Timer()
This timer is enabled in the New() of the class
Try
[code].....
i want to know how to use try catch finally statement.i want to catch this error Violation of PRIMARY KEY constraint 'XPKemployee'. Cannot insert duplicate key in object 'dbo.employee'.
View 4 Repliesi have this problem about the try,catch,finally statement... i don't know how to use it..i have my converter program here and this should be type by a letter 'cause if you do it will go lag or hang...i try VERIFY button to make sure if it's a letter or number but my teacher said it's not counted...
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If ComboBox1.Text = "Pounds To Kilo" Then
[code]....
This is a followup question to this Should I stick with the Try/Catch/Finally construct, or go with the Using construct? Sample Code for Try/Catch/Finally:
[Code]...
Suppose in VB.NET you have:
Try
Debug.Print("Trying...")
Catch ex as Exception
throw new Exception("Exception", ex)
Finally
Debug.Print("Finally...")
End Try
How would you write this using the "On Error Goto" construct? (please no questions asking why I would want to do this, just curious if it can be done).
I have a SqlDataReader and I want to trap any exceptions with Try Catch Finally if the reader =cmd.ExecuteReader() statement fails. If this statement throws an exception do I need to close the reader? If so, where. Wherever I place the reader.close() statement I get an error that the reader has not been assigned a value yet.
View 2 RepliesI am handling errors via my global.asax in this method:
Dim CurrentException As Exception
CurrentException = Server.GetLastError()
Dim LogFilePath As String = Server.MapPath("~/Error/" & DateTime.Now.ToString("dd-MM-yy.HH.mm") & ".txt")
Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(LogFilePath)
[code]....
In my code I currently have no other error handling. Should I still insert try, catch, finally blocks?
I wonder how to use statement handles exceptions?Do I need to wrap the using statements with a Try/Cath/Finally clause in order to be sure that the SqlConnection object is closed and disposed even if the containing code throws an exception? [code]
View 3 RepliesI have a program in VB.Net that receives mails from Outlook, extracts attachments and inserts the attachments into a table through a query. I would like to put the query/queries in a Try/Catch block, but cannot do so as Outlook exceptions cannot be caught, and it gives me an error, and unless I put a very specific exception, I cannot catch it. Is there a workaround?
Edit:
Try
Catch ex As Exception
End Try
Exception is underlined and when I hover on it, it says: "Catch cannot catch type 'Microsoft.Office.Interop.Outlook.Exception' because it is not in 'System.Exception' or a class that inherits from 'System.Exception'". This is affecting all my other code which I'd like to put into a Try/Catch block.
The following code causes a "Warning" that Variable is used before value assigned.How do I restructure this Try/catch to eliminate error on the myreader.close command in the Catch part? Code appears to work fine but I dont like Warnings. [code]
View 8 Repliesi have problem when i click a ADD button, there is one null value in the textbox .. so the try catch statemnt is to catch that null value error but after that the catch is success but the button click never stop excute the statemnt till the end of the button event.
View 6 RepliesI have this scenario: in a Sub I have a Try...Catch statement.Within that Try..Catch I call another sub.In that 2nd sub is also a Try...Catch.(see below for example).Now if an exception occurs in the 2nd sub's Try...Catch, which Catch gets excecuted? The 2nd one, the 1st one or both?
Private Sub sub1()
Try
..do stuff[code].....
I need to catch log4net exceptions (its own exceptions not app exceptions logged by it). I wish there's a way of doing it this way: [code] I have this code implemented and there's no errors in compilation but i force log4net to have an error (pointing to a non existing database in the config file) and nothing is threw.I've tried the listener aproach: [code] and it's writing the errors to log4net.txt, the forced ones i mean.This last aproach has a couple of drawbacks: it won't append every error to the file, if the error is the same it doesn't write it, i can't get the listener to write every error to that file, only one (I don't know how to fully configure the trace listener, it might be that). Thus it won't append the date and hour to every line wich is a necesity for me. Finally i can't give structure to it (xml). Even if the listener work i need to use the try/catch aproach, since i'm using ExceptionHandling from Enterprise library to log the errors in my app.
View 1 RepliesI am using VB.NET 2005 to create a Windows forms application. I have a procedure named SendMail that creates an instance of Outlook.Application, to send an email from my application. I found the code on this forum, I think.The procedure works fine, but I can't use error handling with it.I call the procedure from a button click event. I put the procedure call in a try/catch block, and the application won't build, with the following error.
Error 68 'Catch' cannot catch type 'Microsoft.Office.Interop.Outlook.Exception' because it is not 'System.Exception' or a class that inherits from 'System.Exception'. C:datadevdmtiQTSQTSv7_1_20100212wQTSQTSReportsCriteria
pt_frmReportViewer.vb 43 21 QTS
Here is the code:
Sub SendMail(ByVal sFile As String)
' Create an Outlook application.
Dim oApp As Outlook._Application
[code]....
I often use the Try block to catch exeptions, and I have read in the help pages to do with the Finally statement. But, from what I understand it has no use whatsoever. Why would I use Finally instead of just ending the Try block. For example, from what I know
[Code]...
In this VB.NET code:
Dim o as SomeClass
Try
o = new SomeClass
'call some method on o here
Catch(...)
Why is there a need to set o to Nothing? What if i don't set it to Nothing in the Finally block? What i think is that it is OK if you don't set it to Nothing because the object will be marked for GC.
Assume you have the following code:
Instead of doing:
Try
'
[code].....
Well, I've read (and learned) that the finally block doesn't always execute its code (even apart from pulling the plug).FYI For more information, see try catch finally question
[Code]...
In Finally Block, How can we check if an exception occurred or Not.I am programming in VB.Net. Why i am asking is that in the Finally Block there could be some things you would like to do if an Exception has occured and some things you want to do if an exception has not occured. So, within finally block how do we know if an exception has occured
View 11 Repliesdoes any one know the reason of why I get Warning in the Finally block in vb.
[Code]...
I am Not using the "Catch Ex as Exception" for some of my application's architect details.So, if my code is something like
Try
'code here
Catch ex As ApplicationException '!!! i.e. ApplicationException
[code]....
I'm getting 'Catch' cannot catch type 'Object' because it is not 'System.Exception' or a class that inherits from 'System.Exception'. and 'Expression detected' Code underlined in blue: Catch obj1 As Object When (?)
Private Sub OpenJAMem()
Dim num3 As Integer
Try
[code]....
I have a project converted from Visual Studio 2005 to Visual Studio 2010. It compiles and runs.
When I prune "unused references's from this project as listed by Visual Studio, the project fails to compile with the subject error message.
In particular one of the "unused refererences" is to "Microsoft.VisualBasic.dll". The IDE does not allow me to add back this particular reference.
What do I need to add back as a referenceto get this items?
A few weeks back in reply to a thread, I said then that it's sometimes worse to use a Try/Catch when there's nothing in the Catch!There are exceptions to that I'm sure, but too often the Try/Catch is used with a blank Catch that makes even the developer scratch their heads when the program crashes because they have nothing to go on (by their own doing).DevExpress (and I'm a big fan of their stuff) has a little three minute video that encapsulates that concept well and I thought that you all might enjoy watching it:[URL]
View 1 Replies