I want to get line number of code which cause error. For example;
static void Main(string[] args) { using (SqlConnection conn = new SqlConnection(bagcum)) { SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "DONTINSERT into GIVEMEERROR(CamNo,Statu) values (" + 23 + "," + 0 + ")"; conn.Open(); int n = cmd.ExecuteNonQuery(); } }
so As we know that code doesn't work, it will throw exception Line number of code which is:
int n = cmd.ExecuteNonQuery();
So how can get that line number of using try-catch
? I tried using a StackTrace
class but it gives line number as 0:
static void Main(string[] args) { try { using (SqlConnection conn = new SqlConnection(bagcum)) { SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "DONTINSERT into GIVEMEERROR(CamNo,Statu) values (" + 23 + "," + 0 + ")"; conn.Open(); int n = cmd.ExecuteNonQuery(); } } catch (Exception ex) { System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true); Console.WriteLine("Line: " + trace.GetFrame(0).GetFileLineNumber()); } }
OUTPUT:
Line:0
Update:
Usually error line of code is 22 so I have to get that number.
Thanks
Simple way, use the Exception. ToString() function, it will return the line after the exception description. You can also check the program debug database as it contains debug info/logs about the whole application.
The java. lang. StackTraceElement. getLineNumber() method returns the line number of the source line containing the execution point represented by this stack trace element.
Throw, and Try...Catch... The try statement defines a code block to run (to try). The catch statement defines a code block to handle any error. The finally statement defines a code block to run regardless of the result. The throw statement defines a custom error.
Try this simple hack instead:
First Add this (extension) class to your namespace(most be toplevel class):
public static class ExceptionHelper { public static int LineNumber(this Exception e) { int linenum = 0; try { //linenum = Convert.ToInt32(e.StackTrace.Substring(e.StackTrace.LastIndexOf(":line") + 5)); //For Localized Visual Studio ... In other languages stack trace doesn't end with ":Line 12" linenum = Convert.ToInt32(e.StackTrace.Substring(e.StackTrace.LastIndexOf(' '))); } catch { //Stack trace is not available! } return linenum; } }
And its done!Use LineNumber method whenever you need it:
try { //Do your code here } catch (Exception e) { int linenum = e.LineNumber(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With