Catch Method And Log File - Which One Is The Best Method To Handle Error In Web Based Project
Nov 9, 2010
I have seen 2 methods to handle error in project. One is using try catch in every method and another is using custom page and error log file .I know both method. Which one is the best method?
- 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............................
I am creating an Asp.net web site which will support dynamic data. When I am creating a dynamic web site from Scratch (from template in VS) all is working fine. But when I am trying to add dynamic entity (.edmx) file and running the application I am getting following error
"The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'. "
I don't know what I'm making wrong.I have a submit button, and on click it should execute the funktion in the code behind, but I get the error that the funktion is undefined.this is my code in the .aspx webform:
i have a fileupload control from which i need the path of a text file. After selecting the file,i need to open the file for reading the data from the text file.For this, i used the following code to open the text file.
fp=File.OpenText(FileUpload2.PostedFile.FileName)
This is working fine in my system.The FileUpload2.PostedFile.FileName statement gives the path of the file.The File.OpenText method opens the selected file.But when i run my project in IIS,it gives the following error:
"File.OpenText is not declared."
The FileUpload2.PostedFile.FileName statement is not retrieving the path, it retrieves only only the filename.what could be the reason?
I added the extender and when i tried to add the method this message poped up; Cannot create page method "GetCompletionList" because no Code Behind or codefile was found.
I understand the need for a function like DB_Get_Cached("sql string") that hashes the SQL in order to perform a lookup in memcached for the existence of the data.
function DB_Get_Cached(string SQL) data = memcache_get_data(md5(SQL)) if (!data) return DB_Get(SQL) end if end function
What is a good method to expand this to handle data invalidation or timeout?
I'm thinking in terms of product pages in an e-commerce site, or user details in their profile.
I am trying to create a method that accepts multiple types of controls - in this case Labels and Panels. The conversion does not work because IConvertible doesn't convert these Types.
public void LocationsLink<C>(C control) { if (control != null) { WebControl ctl = (WebControl)Convert.ChangeType(control, typeof(WebControl)); Literal txt = new Literal(); HyperLink lnk = new HyperLink(); txt.Text = "If you prefer a map to the nearest facility please "; lnk.Text = "click here"; lnk.NavigateUrl = "/content/Locations.aspx"; ctl.Controls.Add(txt); ctl.Controls.Add(lnk); } }
So, I have a button that populates a datagridview and shows it to the user. What I'd like to do is show a popup from this button just after it's done with the server logic. How can I do that.
I recently found out about C# extension methods and wrote this one:
/// <summary> /// Short-hand for setting the data source and binding it. /// </summary> /// <param name="me">The control to set and bind the data source of.</param> /// <param name="dataSource">The data source.</param> public static void BindTo(this DataBoundControl me, IEnumerable dataSource) { me.DataSource = dataSource; me.DataBind(); }
What do you guys think? Is this a reasonable extension method to use in a professional ASP.NET project?
I ve just added quartz.net dll to my bin and started my example... How to call a c# method using quartz.net based on time?
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Quartz; using System.IO;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(SendMail()) Response.write("Mail Sent Successfully"); } public bool SendMail() { try { MailMessage mail = new MailMessage(); mail.To = "test@[URL]"; mail.From = "sample@[URL]"; mail.Subject = "Hai Test Web Mail"; mail.BodyFormat = MailFormat.Html; mail.Body = "Hai Test Web Service"; SmtpMail.SmtpServer = [URL]; mail.Fields.Clear(); mail.Fields.Add([URL], "1"); mail.Fields.Add([URL], "redwolf@[URL]); mail.Fields.Add([URL], "************"); mail.Fields.Add([URL], "465"); mail.Fields.Add([URL], "true"); SmtpMail.Send(mail); return (true); } catch (Exception err) { throw err; } } }
Here i am just sending a mail on page load. How to call SendMail() once in a day at a given time (say 6.00 AM) using quartz.net. I dont know how to get started? Should i configure it in my global.asax file.
I have an ObjectDataSource that I want to perform updates using a business entity i.e. Type="Object"). Since the values for the entity are within a user control, I have stored a reference to the control in Session and in the updating event, set the new instance to the value of the entity from the user contol property (which also pulls values from the form viaother properties of the control):
Protected Sub MasterDataSource_Updating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles MasterDataSource.Updating Dim entity As New Login() Dim accountControl As AccountInfo = TryCast(Session("AccountCtrl"), AccountInfo) entity = accountControl.Entity e.InputParameters.Add("entity", entity) End Sub
My question is, how can I get the update method to pass this entity to the update method in my BLL class? It seems the Update method requires an ID or reference to the original object to use in determining whether any changes have taken place, but I don't really want to do this. In other words, I just want to use the Update event on my ObjectDataSource to pass my entity to the method ("Update") I set as a property and then let this business method handle the update of the data. Shown below, is the BLL update method I want to call:
Public Overloads Function Update(ByVal entity As Login) If entity Is Nothing Then Throw New ArgumentNullException("entity") End If MyBase.Update("UpdateLogin", entity.Username, entity.Password, entity.FirstName, entity.LastName, entity.Role, entity.Region, _ entity.Email, entity.Title, entity.TierID, entity.Street, entity.City, entity.State, entity.Zip, entity.Mobile, entity.Phone, entity.Fax) End Function
When I try to call this as it stands now, I get an error: ObjectDataSource 'MasterDataSource' could not find a non-generic method 'Update' that has parameters: ID, entity. Previously, I'd set up a long list of parameters of basic data types (string, int, boolean), but this is rather cumbersome and I was hoping to use an entity for this (FYI, I also got the same type of error when I tried this approach, but with the ID as the last parameter in the list). Perhaps what I'm doing here is atypical to how the ODS is normally used?? Has anyone done something like this successfully?
I have an application that has JS calling ASMX files to do asyncronous requests, using ASP.NET AJAX.
The problem is that I use always the same "onError" function, and now I don't know how to identify the method that rised the error, and it is giving me a lot of problems to debug errors. The parameter "data" of the onError method does not give enough information, for example:
en System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) en System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject) en System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject) en System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o, Type type, JavaScriptSerializer serializer) en System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams) en System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters) en System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams) en System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)
Is there any way to know the webmethod that raised the error?
I want to create a web method that accepts a List of custom objects (passed in via jQuery/JSON). When I run the website locally everything seems to work. jQuery and ASP.NET and everyone is happy. But when I put it on one of our servers it blows up. jQuery gets a 500 error after the ajax request with the response being:
System.InvalidOperationException: EditCustomObjects Web Service method name is not valid. [WebMethod] public void EditCustomObjects(int ID, List<CustomObject> CustomObjectList) [code]...
I have a DetailsView control about a store products.
When I hit the "Edit" button of the DetailsView control, I want to bind a DropDownList to list products categories and select the current product category in it.
I used the method "ModeChanged" to select the current product category like this:
[Code]....
the FindControl method DOES NOT find the "ddlCategory" (returns null) although it's present in the EditTemplateField.
I'm thinking to use "DropDownList's PreRender" event for doing the purpose I aim, but I want to know what is wrong!
I currently have this working but it requires me to have a static method as the method called in the code behind. I would like to be able to access some member variables that can't be static.
EDIT: Let me clarify, I'm looking to edit a value in one of the user controls on the page based on the button click. I am holding the user controls in a list on the page and using the parameters passed through the javascript to find the user control that I want to update and modify the value there.
It currently looks like this:
Javascript:
function incrementCompletes(obj) { var firstParameter = $(obj).parents('.parentClass1').find('.childClass1').html(); var secondParameter = $(obj).parents('.parentClass2').find('.childClass2').html();
[Code]....
I would like to find a solution that does not require the method called to be static.
I want execute below callback() method after completion of document.getElementById('btnDownload').click(); method . Now callback()executing immediatly. I want wait "Click()" process done then Execute callback(); method.
function LoadPopup() { // find the popup behavior this._popup = $find('mdlPopup'); // show the popup this._popup.show(); // synchronously run the server side validation ... document.getElementById('btnDownload').click(); callback(); } function callback() { this._popup = $find('mdlPopup'); // hide the popup this._popup.hide(); alert("hi"); }
Currently, only GenericOfflineCommentary's ExtractPageData() is firing. How can I modify this to first run OfflineFactsheetBase's ExtractPageData() and then GenericOfflineCommentary's?
edit: I'm trying to avoid having to call base.ExtractPageData() in every implementor.
I have a webservice project and a web project in the same solution.
The web project implements a membershipprovider.
I want to be able to authenticate user via the webservice project but when i call this method in the webproject: public static bool AuthUser(string userName, string password) { return Membership.ValidateUser(userName, password); }
I get this inner ex."Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed." Calling the method from the webproject works fine. I understand why I get the ex. but not how to solve it.. UPDATE Well I fixed the issue by deleting the C:UsersJRBAppDataLocalMicrosoftMicrosoft SQL Server DataSQLEXPRESS folder.. However now the method always returns false.. It almost seems like it doesn't use the proper connectionstring.