Проблема в том, что вы пытаетесь получить номер строки первого кадра исключения:
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
Console.WriteLine("Line: " + trace.GetFrame(0).GetFileLineNumber());
Однако, исключение не происходит в строке, которую вынапишите ExecuteNonQuery
, но где-нибудь внутри этой функции, возможно, несколько кадров стека (т.е. вызовы вложенных функций) глубже.Таким образом, первый кадр (который вы явно извлекаете с помощью GetFrame(0)
) находится где-то внутри кода Microsoft (скорее всего, System.Data.dll
), для которого у вас нет отладочных символов.
Запишите полную трассировку стека исключений вваша функция, чтобы понять, что я имею в виду:
try
{
// your code ...
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Если не считать синтаксического анализа трассировки стека (например, ex.StackTrace), нет надежных причин, почему нужно получить номер белья вызова "ExecuteNonQuery ()".Я бы особенно не попытался подсчитать кадры стека вверх по стеку, где происходит ваш вызов ExecuteNonQuery ().
Однако мне интересно, для чего вам нужен единственный номер белья, почему бы просто не записать /Напечатайте / независимо от полной трассировки стека.По крайней мере, из-за диагностических причин, которые в любом случае гораздо полезнее.