Doesn't C# Have Support For First Pass Exception Filtering?
Mar 2, 2009
Note: this is not a duplicate of Jeff's question. That question asked "Is an equivalent?" I know there isn't, and I want to know why! The reason I ask is that I've only just become clear on how important it is, and the conclusion seems very strange to me. The Exception Handling block of Microsoft's Enterprise Library advises us to use this pattern:
[Code]...
The policy is defined in an XML file, so that means that if a customer has an issue, we can modify the policy to assist with tracking down (or perhaps papering over) the problem to give them a fast resolution until we deal with it properly - which may involve arguing with 3rd parties, about whose fault it all is. This is basically an acknowledgement of the simple fact that in real applications the number of exception types and their "recoverability" status is practically impossible to manage without a facility like this.
Meanwhile, the CLR team at MS says this is not an option, and it turns out those guys know what they're talking about! The problem is that right before the catch block runs, any finally blocks nested inside the try block will be executed. So those finally blocks may do any of the following: Harmlessly modify the program state (phew, lucky). Trash something important in the customer's data, because the program state is screwed up to an unknown degree. Disguise or destroy important evidence that we need to diagnose an issue - especially if we're talking about calls into native code. Throw another exception, adding to the general confusion and misery.
Note that the using statement and C++/CLI destructors are built on try/finally, so they're affected too. So clearly the catch/throw pattern for filtering exceptions is no good. What is actually needed is a way to filter exceptions, via a policy, without actually catching them and so triggering the execution of finally blocks, unless we find a policy that tells us the exception is safe to recover from. The CLR team blogged about this recently:
I use Visual Studio 2003, VB.net, NetFramework 1.4 and Windows XP I have been using the following Code Snippet for a number of years in both Web Services and Windows Applications. However suddenly around the 29th September 2010 it has stopped sending E-Mails from both Web Services and Windows Applications. The same problem has happened not only to my own Network but on two other Networks, one using XP as its Server and the other using Server 2003. All 3 of these are using different ISPs.
Since vb doesnt support pointers but c# does. I am using a wrapper dll that requires a pointer to some singles to be passed within the method. I get an error that the method has some parameter types that are not supported. How can i pass a pointer to this method if vb .net doesnt support pointers.
SELECT Convert(char,DATEDIFF(m, Temp.Opening_Date, '2011-05-01')) As MonthDifference From Temp
It was successfully retrieve the data from SQL Server. But when I bind it to my vb.net datatable, the value is null. It's seems like vb.net datatable doesn't support datatype from DateDiff... What can I do?
Are shared properties accessible from a COM exposed .NET assembly?
Dim appExcel As Object Dim objAppSingleton As Object Set objAppSingleton = CreateObject("Pitchbook.CommonUtils.Application.PitchbookAppSingleton")[code].....
The line appExcel = objAppSingleton.CurrentPitchbookExcelApp gives the error:Run-time error '438': Object doesn't support this property or method
I am writing a VB.NET app that has a piece which needs to send a small command to comm port 2 and get the return result. The problem is .NET doesnt have any support for serial communication seems like.
I just need to send the command "headtype" and get the result.
I have been again blessed with legacy code made (presumably) with vs 2008. It's a Visual Basic project with a dependency to SQLite. The actual problem is that it is needed to install and run on Windows 7. Now, I have VB 2008 express in which I opened the project and tried to run it. It threw an exception which was most likely due to the fact that SQLite.dll doesn't support Windows 7 (and/or 64 bit environments). The exception was System. BadImageFormatException. (ddl version was 1.0.65.0)
I read somewhere in the internet that in order to run it in Windows 7 you need to have newer version of it. I downloaded it and managed to change the reference to newer one. Now in the SQLite site it says it requires .net version 3.5 or 4.0. I know that I can change the target framework to 3.5 or even 4.0 but do I need to change some of the old references in the project properties? All the references seem to be to 2.0 libraries. Like System 2.0.0.0 and path to X:windowsMicrosoft. NETFrameworkv2.0.50727System.dll. Does this actually mean that the application is using .net 2.0 although it target framework would be 3.5 or 4.0?
And most importantly do I need to convert my application manually or by using some tool to .net 3.5 or 4.0 in order to get it running with new SQLite dll which requires 3.5 or 4.0?
I want to be able to add a range and get updated for the entire bulk. I also want to be able to cancel the action before it's done (i.e. collection changing besides the 'changed').
I have the following VB code.Dim cmd As New MySqlCommand("SELECT code FROM decoder WHERE ann_id = @aid", conn) cmd.Parameters.AddWithValue("@aid", 1)Dim reader As MySqlDataReader = cmd.ExecuteReader()
The reader.Read() then gives me nothing, however, if I replace the code by.Dim cmd As New MySqlCommand("SELECT code FROM decoder WHERE ann_id = 1", conn) Dim reader As MySqlDataReader = cmd.ExecuteReader() reader.Read() gives the correct result. Tried using Add instead, doesn't help. What am I missing here?
So I have a program that I am converting to .NET FW 3.5 and I am getting the titled exception on the following line:If IsNothing(dsTopPI.Rows.Find(profile.Item("GEMSID"))) Then Continue For
which is in a for each loop. The thing is, I have set the primary key and when I put in the following code:Dim columns() = DSTop30Profiles1.DTtop30profiles.PrimaryKey Console.WriteLine("Column count: " & columns.Length.ToString)For a = 0 To columns.GetUpperBound(0)Console.WriteLine(columns(a).ColumnName & " - " & columns(a).DataType.ToString)Next
I get this in the output:Column count: 1 GEMSID - System.Int32
That would seem to indicate that there is in fact a primary key, right?
Usually when I get an exception, the code line that creates it is marked yellow etc.. However now i only get a System.NullReferenceException as a line in the Immidiate window;
A first chance exception of type 'System.Net.Sockets.SocketException' occurred in System.dll
Is this due to some setting, or why don't I get any better indication?
Why if you pass an object as byVal into a method is it then treated as if it were byRef? I know you're only passing the reference across when you pass an object variable but why doesn't VB force you to decalre the header as byRef?
I have creating timekeeping application, I was used drag and drop for my datagridview. During build I can add, edit and delete records. But when I published and run there was an error saying (see below). [Code] When JIT debugging is enabled, any unhandled exception, will be sent to the JIT debugger registered on the computer, rather than be handled by this dialog box.
I have an ASP.Net form where I use a DropDownList control to display data retrieved from a table. However setting the SelectedValue of the DropDownList to a value not existing in the dropdown list does not trigger an exception.
What is going on with my code. To .NET and handling SQL connections. I am trying to catch an error where lets say someone puts in something that violates the rules of the field (i.e. they put data in a field that doesn't matched what is on the other table.) Please find teh code I ahve put on the save button to try to catch the error. Instead of popping a message box up the program just closes itself.
Private Sub Job_tableBindingNavigatorSaveItem_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Job_tableBindingNavigatorSaveItem.Click Try
I have this issue with casting....is there anyway i could pass an integer into a label...this is what i have done so far but i am getting this error "A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll"
Dim firstNumber As Integer Dim secondNumber As Integer
I compiled some VB6 code on my Win7 x64 machine and the result .exe will not run correctly on any other machine. VB6 code is just a new template .exe file with one button, a reference to "Microsoft ActiveX Data Objects 2.6 Library" and the following code in the button press event: Dim db Set db = New ADODB.Connection It runs correctly on my machine, but no others (even other Win7 x64 machines) (Update: I found TWO other users where it runs and one of them is Jeff Atwood!, but most machines have the same problem)
It is possible to catch an exception and throw a new exception which wraps the first exception as an inner exception: [URL] Also, if I call a function and it throws a certain error, but I catch it, will the calling code's catch handler execute? If so, and it is of a higher exception type, is this not wrapping the exception? eg I can throw exception ex of type IndexOutOfRange, log it but rethrow, catch a higher up exception and do something, or I can throw a new exception and wrap an inner exception like:
Table2 should be updates from table based on the results... If all results is PASS then the table2 should be updated as pass... if any result is FAIL then the entire case_no should be updates a s fail..
This code was working consistently, but now...This code works on the first pass.Then second pass it just hangs on Code:Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient() for about 2 minutesThen the code will fork for another pass, then fail.....
Just started VB programming this week and have found a wealth of information about what I'm trying to do. Problem is, some of it is more complete than others.Here's what I'm trying to do:In Form1 (my main form), I want to instantiate a class that contains a couple of properties (speed setpoint and position setpoint). When I click a button, I want to pass this data to Form2 and populate two textboxes on Form2 with the properties of this object. I want to manipulate the property values on Form2 and click an OK button which closes the dialog and returns the manipulated data, updating the property values of the object. Here's the algorithm I'm following:1) On Form1, instantiate the class2) On Form1's "Pass Data" button click event handler, instantiate a Form2 object and invoke the ShowDialog method, passing the object as a parameter.
3) On Form2, overload the ShowDialog method to accept the object as a parameter and modify the method so that it returns the manipulated class data.4) On Form2, in the ShowDialog method, populate the textboxes with the class data that was passed in.Here's where I get stuck. If I press the OK button on Form2 (DialogResult.OK), it returns me to Form1, but what hook do I have in Form1 to receive the manipulated class data that the ShowDialog method is returning?Here's an example of what I'm thinking about:
Code: Public Class Form1 Dim clsController1 As New MotionController
[code].....
I'm sure it's probably a very elementary question, but every explanation I've found seems to be incomplete.
I have a large project where we have 2-3 dll projects that are converted from VB6 to VB.NET. We have fixed all the issues that caused compilation errors, and most of obvious issues in running, so now we have basically a program up and running. The exe is created from scratch in VB.NET, using a lot of functionality from the converted dll's (including GUI forms). What I wonder is when I run the program in debug mode, I get a bunch of warnings in the "Immediate Window" saying:
A first chance exception of type 'System.Exception' occurred in Microsoft.VisualBasic.dll
...and some of other type (but most of them in Microsoft.VisualBasic.dll).I was wondering if this is common in projects converted from VB6, or if it is caused by bad design in our code...
When I try to create a instance of a COM class it throws an exception as Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
When I try to create a instance of a COM class it throws an exception as Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
I'm trying to catch a user defined permission exception - i.e. a user does something their level of system access won't allow, permission exception is thrown. My problem is, the exception is caught and then rethrown as a genertic System.Exception.Is there any way I can deduce the original exception type, without resorting to string comparisons, like if ex.ToString.Contains("Permission denied"
When catching an exception in .net, you can have as many type-specific exception blocks as needed. But I usually try to have at least one "general" exception catch block. But is there a way to get the type of the "real" exception thrown that is caught by the generic exception handler, perhaps using reflection?For example, if I have
Catch ex As System.ServiceModel.FaultException(Of InvalidUser) ProcessModuleLoadException(Me, ex) Catch ex As System.ServiceModel.FaultException(Of SQLExceptions)