2013-11-22 2 views
5

У меня есть проект winforms, который зависит от пользовательской библиотеки. Все, что работает с приложением, отлично работает, за исключением проблемы, которую я не могу зафиксировать. В принципе у меня есть форма, которая создается из другой формы, которая отображает его в виде диалога:Перерыв в dubugger не «работает». Выполнение кода продолжается

DataItems.ImportForm frmImportTextDelimited = new DataItems.ImportForm(); 
frmImportTextDelimited.ShowDialog(); 

Этот диалог формы заполняет выпадающий список из SqlServer, используя следующую функцию, которая из библиотеки классов в растворе:

public class AuthorityTypeSearcher 
{ 
    public List<IntValuePair> GetAllAuthorityTypes() 
    { 
     List<IntValuePair> returnList = new List<IntValuePair>(); 
     using (var conn = new SqlConnection(Globals.ConnString)) 
     { 
      var cmd = new SqlCommand(); 
      cmd.Connection = conn; 
      cmd.CommandText = "SELECT FROM tblAuthorityTypes"; 
      conn.Open(); 
      IntValuePair ivp; 
      SqlDataReader rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       ivp = new IntValuePair(); 
       ivp.TheInt = Convert.ToInt32(rdr["ID"]); 
       ivp.TheValue = rdr["AuthorityType"].ToString() ; 
      } 
     } 
     return returnList; 
    } 

Эта функция не возвращает значение, поэтому я поставил точку останова на линии:

  conn.Open(); 

Когда код выполняется, то Visual Studio правильно влезает в эта линия. Что делает меня с ума, что, когда я шаг вперед к линии:

  SqlDataReader rdr = cmd.ExecuteReader(); 

отладчик не будет двигаться вперед к следующей строке, и выполнение кода появляется, чтобы вернуться в пользовательский интерфейс (отображается форма). Также странно, что если я взаимодействую с формой (т. Е. Нажимаю кнопку в форме, заполняющей другое поле), отладчик снова разрывается, я возвращаюсь в визуальную студию, которая правильно «ломается» к строке, связанной с этой операцией. По какой-то причине, по какой-то причине, когда я добираюсь до строки, которая создает средство чтения данных, выполнение кода просто «оставляет» библиотеку и возвращается в приложение winforms.

Когда выполнение кода вернулось в пользовательский интерфейс, если я вернусь в визуальную студию, кажется, что выполнение кода продолжается, по крайней мере, я не могу нажать «продолжить» (воспроизведение). Выполнение кода не приостанавливается.

Что же странно, что, если я закрываю форму (диалог), он распадается обратно в отладчик на линии от основной формы на линии:

frmImportTextDelimited.ShowDialog(); 

, как будто я все еще отладки.

Надеюсь, это имеет смысл? Я не могу понять, почему, когда отладка, я не могу пройти мимо строки, где я создаю устройство для чтения данных, и почему выполнение кода возвращается к пользовательскому интерфейсу, но возвращается в отладчик с закрытым диалоговым окном. Ошибка никогда не возникает.

Спасибо за любой совет!

+1

Это просто опечатка? В вашем запросе sql нет возвращаемого списка столбцов. – Steve

+0

У вас есть '' SELECT FROM tblAuthorityTypes '' в качестве вашего запроса. Вы имели в виду что-то вроде: «SELECT * FROM tblAuthorityTypes» '? – Brian

+0

Typo но для ударов я обновил его до «SELECT ID, AuthorityType FROM tblAthorityTypes» с теми же результатами. – rune711

ответ

4

Объяснение этого поведения заключается в поведении 64-битного кода, когда в Form_Load возникает исключение.

Синтаксис вашего запроса неверен. У вас нет списка столбцов, и это приводит к синтаксической ошибке с помощью механизма базы данных.

Но исключение, возникшее во время Form_Load в 64-битной среде, не может быть захвачено отладчиком.

A more detailed answer could be found here

Вы могли бы попытаться исправить запрос, добавив соответствующие имена полей (или звездочкой * для всех полей).
Также попробуйте запустить код вне среды Visual Studio. Вы должны увидеть Исключение где-нибудь.

+1

AH! Отлично. У меня было две ошибки с синтаксисом в SQL-заявлении (я попытался редактировать имена столбцов, но не понял «AuthorTypes» как «AuthorType»). Поскольку ошибки не возникали, я понятия не имел. Я не понял этого оговорки в 64-битных приложениях. Большое большое спасибо. Я начинал терять рассудок. – rune711

+0

Не нужно рассказывать мне, как вы себя чувствуете. :-) Я уже был там, – Steve

1

Попробуйте поместить свой код в блок catch try и посмотрите на внутреннее исключение. Также не должно быть SELECT * FROM tablename?

+0

+1, потому что добавление try/catch показало ошибку, хотя основная путаница была проблемой, о которой объяснил Стив. – rune711

Смежные вопросы