2013-11-22 16 views
5

Özel bir kitaplığa bağlı olan bir winforms projem var. App ile her şey ben pimi olamaz bir sorun dışında çalışıyor. Bu iletişim formu çözeltide bir sınıf kitaplığından aşağıda işlevini kullanarak SqlServer gelen bir açılır liste doldurur"Çalışma" değil dubugger'de kırın .. kod yürütme devam ediyor

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

: Temelde ben bir diyalog olarak görüntüler başka bir formdan oluşturulan bir form var

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; 
    } 

Bu fonksiyon, bir değer döndürür asla, bu yüzden satırda kesme noktası ayarlamak: kodu yürütüldüğünde

  conn.Open(); 

, Görsel stüdyo doğru sonları bu hat.

  SqlDataReader rdr = cmd.ExecuteReader(); 

ayıklayıcı sonraki satıra ileriye hareket etmeyecektir ve kod yürütme (form görüntülenir) UI dönmek için görünür: Ne beni deli ediyor ben hattına ileri adım ne zaman olduğudur. Garip olan şey ise, eğer form ile etkileşimde bulunursam (yani, başka bir alanı dolduran formdaki bir düğmeyi tıklatırsam), hata ayıklayıcının tekrar kırılması, bu işlemle ilgili çizgiye doğru "kırılan" görsel stüdyona dönmem. Her ne sebeple olursa olsun, veri okuyucusunu oluşturan çizgiye ulaştığımda, kod yürütme kütüphaneyi "bırakır" ve winforms uygulamasına geri döner.

Kod yürütmesi kullanıcı arayüzüne geri döndüğü zaman, görsel stüdyona geri dönersem kod yürütme devam ediyor, en azından "devam et" (oynat) 'ı tıklayamıyorum. Kod yürütme "duraklatılmış" değil. Ayrıca garip nedir

Ben formu (iletişim) kapatırsanız, bu hat üzerinde ana formdan hattında geri ayıklayıcıya keser olmasıdır:

frmImportTextDelimited.ShowDialog(); 

Hala ayıklama sanki.

Umarım bu mantıklıdır? Neden, hata ayıklama yaparken, veri okuyucuyu oluşturduğum satırı geçemediğimi ve kod yürütme işleminin kullanıcı arabirimine neden geri döndüğünü, ancak iletişim kutusu kapatıldığında hata ayıklayıcısına geri döndüğümü anlayamıyorum. Hiçbir hata atılmadı.

Önerileriniz için teşekkürler!

+1

Sadece bir yazım hatası mı? Sql sorgunuz iade edilecek sütun listesine sahip değil. – Steve

+0

Sorgunuz olarak "tblAuthorityTypes FROM" ifadesini kullanmışsınız. "SELECT * FROM tOuthorityTypes" türünde bir şey mi demek istediniz? – Brian

+0

Yazım hatası ancak tekmeler için aynı sonuçları "SELECT ID, AuthorityType FROM tblAthorityTypes" olarak güncelledim. – rune711

cevap

4

Bu davranışın açıklaması, Form_Load sırasında bir istisna oluştuğunda 64 bit kodunun davranışında yatmaktadır.

Sorgunuzun sözdizimi yanlış. Bir sütun listeniz yok ve bu, veritabanı motorunuz tarafından bir sözdizimi hatası veriyor.

Ancak 64 bit ortamda Form_Load sırasında kaldırılan bir özel durum hata ayıklayıcı tarafından yakalanamaz.

A more detailed answer could be found here

Uygun alan adları (veya tüm alanlar için bir yıldız *) ekleyerek Sorgunuzla düzeltmek için deneyebilirsiniz.
Ayrıca kodunuzu Visual Studio IDE dışında çalıştırmayı deneyin. İstisnayı bir yerlerde görmelisiniz.

+1

AH! Olağanüstü. SQL deyiminde sözdizimi ile iki hatam vardı (sütun adlarını düzenlemeyi denedim ancak "AuthorityTypes" olarak yanlış yazdım "AuthorityType"). Hiçbir hata hiç atılmadığından hiçbir fikrim yoktu. 64 bit uygulamaların bu uyarısını fark etmedim. Çok çok teşekkürler. Aklımı kaybetmeye başlamıştım. – rune711

+0

Bunun hakkında nasıl hissettiğinizi söylemenize gerek yok. :-) zaten oradaydım- – Steve

1

Kodunuzu bir try catch bloğuna koymaya çalışın ve iç özel duruma bakın. Ayrıca SELECT * FROM tablename olmalıdır?

+0

+1, çünkü try/catch eklenmesi, Steve'in açıkladığı temel karışıklık olmasına rağmen hatayı gösterdi. – rune711