How To Catch Specific Exceptions Other Than The Reason Of Displaying A Particular Error To The User
Dec 31, 2010
I have a couple of questions on exception handling in .net: 1- Why do we have to catch specific exceptions other than the reason of displaying a particular error to the user? What if we wanted to always display a generic error to the user and not give him much details, would it be okay to catch only generic xceptions?
2- Is throwing exceptions from the data access layer to the UI layer best practice, or is it recommended to return a string or perhaps a boolean values from the data access layer to the UI layer?
- I have a situation in which I must execute a dynamically built stored procedure against tables that may, or may not be in the database. The data retrieved is then shunted to a VB.Net backed ASP based report page. By design, if the tables are not present in the database, the relevant data is automatically hidden on the report page. Currently, I'm doing this by checking for the inevitable error, and hiding the div in the catch block. A bit kludgy, but it worked. I can't include the VB code-behind, but the relevant stored procedure is included below.
However, a problem with this method was recently brought to my attention when, for no apparent reason, the div was being hidden even though the proper data was available. As it turned out, the user trying to select the table in the dynamic SQL call didn't have the proper select permissions, an easy enough fix once I could track it down. So, two fold question. First and foremost - is there a better way to check for a missing table than through catching the error in the VB.Net codebehind? All things considered, I'd rather save the error checking for an actual error. Secondly, is there a preferred method to squirrel out a particular OLE DB error out of the general object caught by the try->catch block other than just checking the actual stack trace string?
SQL Query - The main gist of the code is that, due to the design of the database, I have to determine the name of the actual table being targeted manually. The database records jobs in a single table, but each job also gets its own table for processing data on the items processed in that job, and it's data from those tables I have to retrieve. Absolutely nothing I can do about this setup, unfortunately.
DECLARE @sql NVarChar(Max), @params NVarChar(Max), @where NVarChar(Max) -- Retained for live testing of stored procedure. -- DECLARE @Table NvarChar(255) SET @Table = N'tblMSGExportMessage_10000' -- DECLARE @AcctID Integer SET @AcctID = 10000 -- DECLARE @Type Integer SET @Type = 0 -- 0 = Errors only, 1 = All Messages -- DECLARE @Count Integer -- Sets our parameters for our two dynamic SQL calls. SELECT @params = N'@MsgExportAccount INT, @cnt INT OUTPUT' -- Sets our where clause dependent upon whether we want all results or just errors............................
How/Can I Set the try, catch statment to catch a specific Error. For example i am getting the following error:
Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near '='., [SqlException (0x80131904): Incorrect syntax near '='.]
Basicly The = is part of my SQL string which points to a table that currently doesent exist. I want something like catch ex as SqlException (0x80131904) or catch ex as SqlException = "0x80131904" or even catch ex as System.Data.SqlClient.SqlException = "Incorrect syntax near '='." I just want something so i can put "table doesnt exist" in the error message without having to use:
catch ex as System.Data.SqlClient.SqlException
As i have other code on my page that could result in a different type of sqlExeption.
i want to display the errors in a seprate page so in catch block i redirected the execption to that page, in all the pages it's working fine, but if get any error in my db retuning datas means, im' getting redirect loop in browers itself not redirecting to the page i needed. how to fix this??
If I am just logging exception details in my web app, do I really need to put in exception handling logic for each tier? Why not just let them all bubble up the stack trace to the global.asax and log them there?
I'm trying to improve my password change function in my app that allows members to change their passwords. I do have some password rules e.g. min 7 characters, etc.
There's a nice MembershipCreateStatus enumeration in the framework for creating new members. Is there a similar tool for catching password exceptions where the user's newly selected password doesn't match the rules?
I was wondering what will be the method to catch any exception at server end and to show the error message in a div with error icon on top of the page using jquery. All the examples I have browsed show how to display the div on click of some button or link but in my case the scenerio is different. I want to use it for displaying messages to user and make use of Jquery's animations as well.
I am fairly new to the asp.net scene. Having build a dashboard gathering info on my OLAP system's health status, I can't seem to figure out how to make sure that I catch the no connection exception.I use the following statements on the datagrid:a) want to change the color of ssas2 button to red if an exception is throw
Looking for best practice focused answers here with explanations.
Should the presentation layer of an ASP.Net app catch and handle exceptions thrown from the business layer, or should these be allowed to bubble out, where they can all be logged and handled uniformly in the Global.ascx's Application_Error handler?
I am fairly new to the asp.net scene. Having build a dashboard gathering info on my OLAP system's health status, I can't seem to figure out how to make sure that I catch the no connection exception.use the following statements on the datagrid:a) want to change the color of ssas2 button to red if an exception is thrown
Here is the code copied from [URL] In asp.net code behind, I use try-catch try to catch any error but never catch it. In SQL database, if I rename Employees to Employeesx or change column DepartmentID to DepartmentIDx, record will not be deleted (it is right) without any error (it is wrong, suppose catch an error).
CREATE PROCEDURE DeleteDepartment ( @DepartmentID int ) AS BEGIN TRANSACTION DELETE FROM Employees WHERE DepartmentID = @DepartmentID IF @@ERROR <> 0 BEGIN ROLLBACK RAISERROR ('Error', 16, 1) RETURN END DELETE FROM Departments WHERE DepartmentID = @DepartmentID IF @@ERROR <> 0 BEGIN ROLLBACK RAISERROR ('Error', 16, 1) RETURN END OMMIT
I am trying to display data from my database using FormView. However, I only want data for the currently logged in user to be queried. The database already contains the UserName for each user.
I have text box get data from dataread. Here my code:
OleDbCommand com = new OleDbCommand("select sid from TableOne where pid = " + "'" + PID.SelectedValue + "'" + " and gid = " + "'" + GID.SelectedValue + "'" + " and unitid = " + "'" + tid.SelectedValue + "'"); ........ ........ Txtsid.Text = myDataReader[0].ToString().Trim();
I got the run time error at line: Txtsid.Text = myDataReader[0].ToString().Trim(); Invalidoperationexception was unhandled by user code. No data exists for the row/column. How to try catching those errors?
I have to write a mini social networking website, and I seem to have run into a little bump. I want to display a user picture but for some reason it isn't working. The control looks like this
I am using forms authentication and authorization through roleManager. I have two Roles - "Customers" and "Employees". The redirection to the default page for the "Customers" role is working fine, but I get an oledb error stating that one or more parameters are not being passed when I redirect a user from the "Employees" role. The following is the code in login.aspx that handles the authentication of the user:
If myReader.Read() Then ' We have a match If myReader(1) Then ' This is true if an Employee and false otherwise If Not Roles.IsUserInRole(logInUser.UserName, "Employees") Then Roles.AddUserToRole(logInUser.UserName, "Employees") End If ElseIf Not Roles.IsUserInRole(logInUser.UserName, "Customers") Then Roles.AddUserToRole(logInUser.UserName, "Customers") End If FormsAuthentication.RedirectFromLoginPage(logInUser.UserName, logInUser.RememberMeSet) Else Response.Write("Invalid credentials") End If............................................
I am trying to use Windows Authentication in my asp code. I have read / tried all answers on the web but couldnt my page to connect to sql. I m using classic asp.
My conn string looks like :
OCONN.OPEN ("PROVIDER=SQLOLEDB; DATA SOURCE myserver; INITIAL CATALOG=nrth; Integrated Security=SSPI; trusted_Connection=yes")
but I mgetting error
Microsoft OLE DB Provider for SQL Server
Login failed for user '(null)'. Reason: Not associated with a trusted SQL Server connection.error '80004005'
I'm building the standard 3-tier ASP.NET web application but I'm struggling as to where to do certain things - specifically handling exceptions.
I've tried to have a look around on the web for some examples but can't find any which go as far as a whole project showing how everything links together.
In my data-tier I'm connecting to SQL Server and doing some stuff. I know I need to catch exceptions that could be raised as a result but I'm not sure where to do it.
From what I've read I should be doing it in the UI tier but in that case I'm not sure how to ensure that the connection to the database is closed. Is anyone able to clarify how to do this? Also if anyone knows as to where I could find an example 3-tier web application that follows best practices that would be great too.
We have a asp.net application and want to implement logging. The first idea was to use the Application_Error method in the global.asax file.
The problem is that ASP.NET very often seem to throw exceptions internally that are not caused by the application and which seem not to interfer with the users normal workflow. For example we often get HTTPExceptions, UnauthorizedAccessExceptions and others caught in this method, although there is no real error in the application.
I didn't want to post anything before i search and upgrade to the latest ajax3.5I copied the zip extracted it in a location and then on vs2008 i added a toolbox and i imported the jaxcontroltoolkit.dll(the very first on the folder).
I got the controls and all is fine until then.
The problem (i previous had with the beta version) stayed.
I did not handle an exception and vs prompted me for the location of accordioncontrol.cs (i don't clearly remember the control), saying there is no source code and i should provide one.I clicked cancel (there is clearly no accordion .cs control on the zip) and the program got the exception on the web page.Ok.
Now everytime i put a breakpoint on the page and it reaches the last end sub it prompts me this "There is no source code available for the current location."I can hit F5 and pass this, however if i hit F11(next statement) it prompts me for the location of the picture i include here. I remember finding the cs somewhere for the beta and included it and it prompted me for wrong version or something on the unhandled exceptions so i have forgotten the error (because i usually handle all my exceptions so i didn't have any for a while).
I have what is probably a basic question, but I am rather new to writing exception handling code. I thought I understood the concept, but apparently I don't, heres the code:
[Code]....
If I enter in any non-integer values, the textbox is set to nothing and the label displays the error message. However, now that I have verified the textbox contains an integer, I want to continue on and use that value. The remaining code works fine unless there was an exception, in which case the conversion to an int value for x throws an error.
All the examples I have looked at demos the structure of try-catch-finally, but in this instance I am not performing any clean up, I want to execute code when a valid value is entered into the textbox.
I have some code that is throwing unhandled DivideByZero exceptions in a WebMethod. These exceptions are not being caught by the global logging in Application_Error in global.asax. why exceptions thrown from a WebMethod are not handled by Application_Error?
In my SP (Sql Server 2005) I'm raising an error usingRaiserror ('No Records Fetched' , 16 ,1)I want to catch this particular error in ASP.NET.. how do I do it ?
I have been tasked with implementing a strategy to catch all errors in an ASP.net application which cause a user request or interaction to crash and then e-mailk this exception to a support team in advance of a user calling about the error.Some errors however are not causing the page to crash or be redirected to the custom error page but these are being emailed to the support team instead of simply being loggedMy requirement is to seperate what exception types will cause a page fail and which will not.Example I am currently receiving a System.Web.HttpUnHandledException which is not causing any page to fall over and therefore is not of relevance to the support team. this can be logged but does not require emailing.