Saklı Yordamların Hatalarını Ayıklama (C#)
tarafından Scott Mitchell
Visual Studio Professional ve Team System sürümleri, kesme noktaları ayarlamanıza ve SQL Server içindeki saklı yordamlara adım atarak saklı yordamlarda hata ayıklamayı uygulama kodunda hata ayıklamak kadar kolay hale getirmenize olanak sağlar. Bu öğreticide, saklı yordamların doğrudan veritabanı hata ayıklaması ve uygulama hata ayıklaması gösterilmektedir.
Giriş
Visual Studio zengin bir hata ayıklama deneyimi sağlar. Birkaç tuş vuruşu veya fare tıklamasıyla, bir programın yürütülmesini durdurmak ve durumunu ve denetim akışını incelemek için kesme noktaları kullanabilirsiniz. Visual Studio, uygulama kodunda hata ayıklamanın yanı sıra SQL Server içinden saklı yordamlarda hata ayıklama desteği de sunar. Kesme noktalarının arka planda kod ASP.NET sınıfı veya İş Mantığı Katmanı sınıfının kodu içinde ayarlanabildiği gibi, bunlar da saklı yordamlara yerleştirilebilir.
Bu öğreticide, Visual Studio'daki Sunucu Gezgini'nden saklı yordamlara adım atmayı ve saklı yordam çalışan ASP.NET uygulamasından çağrıldığında isabet alan kesme noktalarını ayarlamayı inceleyeceğiz.
Not
Ne yazık ki saklı yordamlara yalnızca Visual Studio'nun Professional ve Team Systems sürümleri aracılığıyla basılabilir ve hata ayıklanabilir. Visual Web Developer'ı veya Visual Studio'nun standart sürümünü kullanıyorsanız saklı yordamlarda hata ayıklamak için gerekli adımları incelediğimizde okumaya devam edebilirsiniz, ancak bu adımları makinenizde çoğaltamazsınız.
hata ayıklama kavramlarını SQL Server
Microsoft SQL Server 2005, tüm .NET derlemeleri tarafından kullanılan çalışma zamanı olan Common Language Runtime (CLR) ile tümleştirme sağlamak için tasarlanmıştır. Sonuç olarak, SQL Server 2005 yönetilen veritabanı nesnelerini destekler. Yani, C# sınıfında yöntemler olarak saklı yordamlar ve User-Defined İşlevleri (UDF) gibi veritabanı nesneleri oluşturabilirsiniz. Bu, bu saklı yordamların ve UDF'lerin .NET Framework ve kendi özel sınıflarınızdan işlevselliği kullanmasına olanak tanır. Elbette SQL Server 2005, T-SQL veritabanı nesneleri için de destek sağlar.
SQL Server 2005, hem T-SQL hem de yönetilen veritabanı nesneleri için hata ayıklama desteği sunar. Ancak, bu nesneler yalnızca Visual Studio 2005 Professional ve Team Systems sürümleri aracılığıyla hata ayıklanabilir. Bu öğreticide T-SQL veritabanı nesnelerinde hata ayıklamayı inceleyeceğiz. Sonraki öğreticide yönetilen veritabanı nesnelerinde hata ayıklamaya bakabilirsiniz.
SQL Server 2005 CLR Tümleştirme ekibinden SQL Server2005'te T-SQL ve CLR Hata Ayıklamaya Genel Bakış blog girdisi, Visual Studio'dan SQL Server 2005 nesnelerinde hata ayıklamanın üç yolunu vurgular:
- Doğrudan Veritabanı Hata Ayıklama (DDD) - Sunucu Gezgini'nden saklı yordamlar ve UDF'ler gibi herhangi bir T-SQL veritabanı nesnesine adım atabiliriz. 1. Adımda DDD'i inceleyeceğiz.
- Uygulama Hata Ayıklama - Veritabanı nesnesi içinde kesme noktaları ayarlayabilir ve ardından ASP.NET uygulamamızı çalıştırabiliriz. Veritabanı nesnesi yürütürken kesme noktasına isabet edilir ve denetim hata ayıklayıcıya devredilir. Uygulama hata ayıklama ile uygulama kodundan bir veritabanı nesnesine adım atamayacağımızı unutmayın. Bu saklı yordamlarda veya UDF'lerde hata ayıklayıcının durmasını istediğimiz kesme noktalarını açıkça ayarlamalıyız. Uygulama hata ayıklaması 2. Adım'dan başlayarak incelendi.
- bir SQL Server Projesinden hata ayıklama - Visual Studio Professional ve Team Systems sürümleri, yönetilen veritabanı nesneleri oluşturmak için yaygın olarak kullanılan bir SQL Server Proje türü içerir. Sonraki öğreticide SQL Server Projelerini kullanmayı ve içeriklerinde hata ayıklamayı inceleyeceğiz.
Visual Studio, yerel ve uzak SQL Server örneklerinde saklı yordamların hatalarını ayıklayabilir. Yerel SQL Server örneği, Visual Studio ile aynı makineye yüklenen örnektir. Kullandığınız SQL Server veritabanı geliştirme makinenizde yoksa, uzak örnek olarak kabul edilir. Bu öğreticiler için yerel SQL Server örneklerini kullanıyoruz. Uzak sql sunucusu örneğinde saklı yordamlarda hata ayıklamak için yerel örnekteki saklı yordamlarda hata ayıklamaya kıyasla daha fazla yapılandırma adımı gerekir.
Yerel bir SQL Server örneği kullanıyorsanız, 1. Adım ile başlayabilir ve bu öğreticiyi sonuna kadar çalışabilirsiniz. Ancak uzak bir SQL Server örneği kullanıyorsanız, ilk olarak hata ayıklarken geliştirme makinenizde uzak örnekte SQL Server oturum açma bilgisi olan bir Windows kullanıcı hesabıyla oturum açtığınızdan emin olmanız gerekir. Ayrıca, hem bu veritabanı oturum açma bilgileri hem de çalışan ASP.NET uygulamasından veritabanına bağlanmak için kullanılan veritabanı oturum açma bilgileri rolün sysadmin
üyesi olmalıdır. Visual Studio'yu yapılandırma ve uzak örnekte hata ayıklamayı SQL Server hakkında daha fazla bilgi için bu öğreticinin sonundaki Uzak Örneklerde T-SQL Veritabanı Nesnelerinde Hata Ayıklama bölümüne bakın.
Son olarak, T-SQL veritabanı nesneleri için hata ayıklama desteğinin .NET uygulamaları için hata ayıklama desteği kadar zengin bir özellik olmadığını anlayın. Örneğin, kesme noktası koşulları ve filtreleri desteklenmez, hata ayıklama pencerelerinin yalnızca bir alt kümesi kullanılabilir, Düzenle ve Devam Et'i kullanamazsınız, Anlık penceresi kullanılamaz hale getirilir vb. Daha fazla bilgi için bkz. Hata Ayıklayıcı Komutları ve Özellikleriyle İlgili Sınırlamalar .
1. Adım: Saklı Yordama Doğrudan AdımLama
Visual Studio, veritabanı nesnesinde doğrudan hata ayıklamayı kolaylaştırır. Northwind veritabanındaki saklı yordama geçmek Products_SelectByCategoryID
için Doğrudan Veritabanı Hata Ayıklama (DDD) özelliğinin nasıl kullanılacağına bakalım. Adından da anlaşılacağı gibi, Products_SelectByCategoryID
belirli bir kategoriye ait ürün bilgilerini döndürür; Türlenmiş DataSet'in TableAdapers öğreticisi için Varolan Saklı Yordamları Kullanma öğreticisinde oluşturulmuştur. Sunucu Gezgini'ne giderek başlayın ve Northwind veritabanı düğümünü genişletin. Ardından Saklı Yordamlar klasöründe detaya gidin, saklı yordama Products_SelectByCategoryID
sağ tıklayın ve bağlam menüsünden Saklı Yordama AdımLa seçeneğini belirleyin. Bu işlem hata ayıklayıcıyı başlatır.
Products_SelectByCategoryID
Saklı yordam bir @CategoryID
giriş parametresi beklediğinden, bu değeri sağlamamız istenir. İçecekler hakkındaki bilgileri döndürecek olan 1 girin.
@CategoryID Parametresi için Değer 1'i kullanın" />
Şekil 1: Parametre için Değer 1'i @CategoryID
kullanma
parametresi için değer sağlandıktan @CategoryID
sonra saklı yordam yürütülür. Ancak hata ayıklayıcı, tamamlanmasını çalıştırmak yerine ilk deyimde yürütmeyi durdurur. Saklı yordamdaki geçerli konumu gösteren kenar boşluğundaki sarı oku not edin. Parametre değerlerini İzleme penceresi aracılığıyla veya saklı yordamda parametre adının üzerine gelerek görüntüleyebilir ve düzenleyebilirsiniz.
Şekil 2: Saklı Yordamın İlk Deyiminde Hata Ayıklayıcı Durduruldu (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Saklı yordamda bir kerede bir deyimde adım adım ilerleyebilmek için Araç Çubuğu'ndaki Adımla düğmesine tıklayın veya F10 tuşuna basın. Saklı Products_SelectByCategoryID
yordam tek SELECT
bir deyim içerir, bu nedenle F10'a basmak tek deyimin üzerine gelir ve saklı yordamın yürütülmesini tamamlar. Saklı yordam tamamlandıktan sonra çıktısı Çıkış penceresinde görünür ve hata ayıklayıcı sonlandırılır.
Not
T-SQL hata ayıklama deyimi düzeyinde gerçekleşir; deyimine SELECT
adım atamazsınız.
2. Adım: Web Sitesini Uygulama Hata Ayıklama için Yapılandırma
Saklı yordamda doğrudan Sunucu Gezgini'nden hata ayıklamak kullanışlı olsa da, birçok senaryoda saklı yordamın ASP.NET uygulamamızdan çağrıldığında hata ayıklamayla daha çok ilgileniyoruz. Visual Studio'dan saklı yordama kesme noktaları ekleyebilir ve ardından ASP.NET uygulamasında hata ayıklamaya başlayabiliriz. Uygulamadan kesme noktaları içeren bir saklı yordam çağrıldığında yürütme kesme noktasında durur ve 1. Adımda yaptığımız gibi saklı yordamın parametre değerlerini görüntüleyebilir ve değiştirebilir ve deyimlerinde ilerleyebiliriz.
Uygulamadan çağrılan saklı yordamlarda hata ayıklamaya başlamadan önce, ASP.NET web uygulamasına SQL Server hata ayıklayıcısıyla tümleştirilmesi talimatını vermemiz gerekir. başlangıç olarak Çözüm Gezgini ()ASPNET_Data_Tutorial_74_CS
web sitesi adına sağ tıklayın. Bağlam menüsünden Özellik Sayfaları seçeneğini belirleyin, soldaki Başlangıç Seçenekleri öğesini seçin ve Hata Ayıklayıcılar bölümündeki SQL Server onay kutusunu işaretleyin (bkz. Şekil 3).
Şekil 3: Uygulamanın Özellik Sayfalarında SQL Server Onay Kutusunu işaretleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)
Ayrıca, bağlantı havuzunun devre dışı bırakılması için uygulama tarafından kullanılan veritabanı bağlantı dizesi güncelleştirmemiz gerekir. Bir veritabanına bağlantı kapatıldığında, buna karşılık gelen SqlConnection
nesne kullanılabilir bağlantı havuzuna yerleştirilir. Veritabanına bağlantı kurarken, yeni bir bağlantı oluşturmak ve kurmak yerine bu havuzdan kullanılabilir bir bağlantı nesnesi alınabilir. Bu bağlantı nesneleri havuzu bir performans geliştirmesidir ve varsayılan olarak etkindir. Ancak hata ayıklama sırasında, hata ayıklama altyapısı havuzdan alınan bir bağlantıyla çalışırken doğru şekilde yeniden kurulmadığından bağlantı havuzunu kapatmak istiyoruz.
Bağlantı havuzunu devre dışı bırakabilmek için, ayarını içermesi için 'ı Web.config
güncelleştirin.NORTHWNDConnectionString
Pooling=false
<connectionStrings>
<add name="NORTHWNDConnectionString" connectionString=
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;
Integrated Security=True;User Instance=True;Pooling=false"
providerName="System.Data.SqlClient" />
</connectionStrings>
Not
ASP.NET uygulaması aracılığıyla SQL Server hata ayıklamayı tamamladıktan sonra, ayarı bağlantı dizesi kaldırarak Pooling
(veya olarak ayarlayarak Pooling=true
) bağlantı havuzunu yeniden devreye eklediğinizden emin olun.
Bu noktada ASP.NET uygulaması, Web uygulaması aracılığıyla çağrıldığında Visual Studio'nun SQL Server veritabanı nesnelerinde hata ayıklamasına izin verecek şekilde yapılandırılmıştır. Şimdi geriye kalan tek şey saklı yordama kesme noktası eklemek ve hata ayıklamaya başlamak!
3. Adım: Kesme Noktası Ekleme ve Hata Ayıklama
Products_SelectByCategoryID
Saklı yordamı açın ve uygun yerdeki kenar boşluğuna tıklayarak veya imlecinizi deyimin SELECT
başına getirip F9'a basarak deyimin SELECT
başında bir kesme noktası ayarlayın. Şekil 4'te gösterildiği gibi kesme noktası kenar boşluğunda kırmızı bir daire olarak görünür.
Şekil 4: Saklı Yordamda Products_SelectByCategoryID
Kesme Noktası Ayarlama (Tam boyutlu görüntüyü görüntülemek için tıklayın)
BIR SQL veritabanı nesnesinin bir istemci uygulaması aracılığıyla hata ayıklanması için, veritabanının uygulama hata ayıklamasını destekleyecek şekilde yapılandırılması zorunludur. Kesme noktasını ilk kez ayarladığınızda, bu ayar otomatik olarak açılmalıdır, ancak iki kez kontrol etmek akıllıca olur. Sunucu Gezgini'nde NORTHWND.MDF
düğüme sağ tıklayın. Bağlam menüsünde Uygulama Hata Ayıklama adlı işaretli bir menü öğesi bulunmalıdır.
Şekil 5: Uygulama Hata Ayıklama Seçeneğinin Etkinleştirildiğinden emin olun
Kesme noktası kümesi ve Uygulama Hata Ayıklama seçeneği etkinleştirildiğinde, ASP.NET uygulamasından çağrıldığında saklı yordamın hatalarını ayıklamaya hazırız. Hata Ayıkla menüsüne gidip Hata Ayıklamayı Başlat'ı seçerek, F5'e basarak veya Araç Çubuğu'ndaki yeşil oynatma simgesine tıklayarak hata ayıklayıcıyı başlatın. Bu işlem hata ayıklayıcıyı başlatır ve web sitesini başlatır.
Saklı yordam, Products_SelectByCategoryID
Typed DataSet s TableAdapters öğreticisi için Mevcut Saklı Yordamları Kullanma öğreticisinde oluşturulmuştur. İlgili web sayfası (~/AdvancedDAL/ExistingSprocs.aspx
), bu saklı yordam tarafından döndürülen sonuçları görüntüleyen bir GridView içerir. Bu sayfayı tarayıcı üzerinden ziyaret edin. Sayfaya ulaşıldıktan sonra saklı yordamdaki Products_SelectByCategoryID
kesme noktasına ulaşılır ve denetim Visual Studio'ya döndürülür. 1. Adım'da olduğu gibi saklı yordam deyimlerinde adım adım ilerleyebilir ve parametre değerlerini görüntüleyebilir ve değiştirebilirsiniz.
Şekil 6: ExistingSprocs.aspx
Sayfa Başlangıçta İçecekleri Görüntüler (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 7: Saklı Yordamın Kesme Noktasına Ulaşıldı (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 7'deki gözcü penceresinde gösterildiği gibi parametrenin @CategoryID
değeri 1'dir. Bunun nedeni ExistingSprocs.aspx
, sayfanın başlangıçta 1 değeri olan CategoryID
içecekler kategorisindeki ürünleri görüntülemesidir. Açılan listeden farklı bir kategori seçin. Bunu yapmak geri göndermeye neden olur ve saklı yordamı yeniden yürütür Products_SelectByCategoryID
. Kesme noktasına yeniden isabet edilir, ancak bu kez parametrenin @CategoryID
değeri seçili açılan liste öğesinin s CategoryID
değerini yansıtır.
Şekil 8: Drop-Down Listesinden Farklı Bir Kategori Seçin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
@CategoryID Parametresi Web Sayfasından Seçilen Kategoriyi Yansıtır" />
Şekil 9: @CategoryID
Parametre, Web Sayfasından Seçilen Kategoriyi Yansıtır (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
Sayfayı ziyaret ExistingSprocs.aspx
ederken saklı yordamdaki Products_SelectByCategoryID
kesme noktasına isabet edilmediyse, ASP.NET uygulamanın Özellikler Sayfasının Hata Ayıklayıcılar bölümünde SQL Server onay kutusunun işaretlendiğinden, bu bağlantı havuzunun devre dışı bırakıldıktan ve veritabanının Uygulama Hata Ayıklama seçeneğinin etkinleştirildiğinden emin olun. Sorun yaşamaya devam ediyorsanız Visual Studio'yu yeniden başlatın ve yeniden deneyin.
Uzak Örneklerde T-SQL Veritabanı Nesnelerinde Hata Ayıklama
SQL Server veritabanı örneği Visual Studio ile aynı makinede olduğunda Visual Studio aracılığıyla veritabanı nesnelerinde hata ayıklama oldukça basittir. Ancak, SQL Server ve Visual Studio farklı makinelerde bulunuyorsa, her şeyin düzgün çalışmasını sağlamak için dikkatli bir yapılandırma gerekir. Karşılaştığımız iki temel görev vardır:
- ADO.NET aracılığıyla veritabanına bağlanmak için kullanılan oturum açma bilgilerinin role ait
sysadmin
olduğundan emin olun. - Geliştirme makinesinde Visual Studio tarafından kullanılan Windows kullanıcı hesabının role ait
sysadmin
geçerli bir SQL Server oturum açma hesabı olduğundan emin olun.
İlk adım oldukça basittir. İlk olarak, ASP.NET uygulamasından veritabanına bağlanmak için kullanılan kullanıcı hesabını belirleyin ve ardından SQL Server Management Studio bu oturum açma hesabını sysadmin
role ekleyin.
İkinci görev, uygulamada hata ayıklamak için kullandığınız Windows kullanıcı hesabının uzak veritabanında geçerli bir oturum açma bilgisi olmasını gerektirir. Ancak, iş istasyonunuzda oturum açtığınız Windows hesabının SQL Server'da geçerli bir oturum açma işlemi olmaması olasılığı vardır. Belirli oturum açma hesabınızı SQL Server eklemek yerine, bazı Windows kullanıcı hesabını SQL Server hata ayıklama hesabı olarak belirlemek daha iyi bir seçenektir. Daha sonra, uzak SQL Server örneğin veritabanı nesnelerinde hata ayıklamak için Visual Studio'yu bu Windows oturum açma hesabının kimlik bilgilerini kullanarak çalıştırırsınız.
Bir örnek, olayları netleştirmeye yardımcı olmalıdır. Windows etki alanında adlı SQLDebug
bir Windows hesabı olduğunu düşünün. Bu hesabın uzak SQL Server örneğine geçerli bir oturum açma bilgisi olarak ve rolün sysadmin
bir üyesi olarak eklenmesi gerekir. Ardından, Visual Studio'dan uzak SQL Server örneğinde hata ayıklamak için kullanıcı olarak SQLDebug
Visual Studio'yu çalıştırmamız gerekir. Bu işlem, iş istasyonumuzun oturumunu kapatarak, yeniden olarak SQLDebug
oturum açarak ve sonra Visual Studio'yu başlatarak yapılabilir, ancak daha basit bir yaklaşım kendi kimlik bilgilerimizi kullanarak iş istasyonumuzda oturum açmak ve ardından kullanıcı olarak SQLDebug
Visual Studio'yu başlatmak için kullanmaktırrunas.exe
. runas.exe
belirli bir uygulamanın farklı bir kullanıcı hesabının guise'i altında yürütülmesine izin verir. Visual Studio'yu olarak SQLDebug
başlatmak için komut satırına aşağıdaki deyimi girebilirsiniz:
runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"
Bu işlemle ilgili daha ayrıntılı bir açıklama için bkz. William R. Vaughn'unHitchhiker's Guide to Visual Studio ve SQL Server, Seventh Edition.
Not
Geliştirme makineniz Windows XP Service Pack 2 çalıştırıyorsa, uzaktan hata ayıklamaya izin vermek için İnternet Bağlantısı Güvenlik Duvarı'nı yapılandırmanız gerekir. Nasıl Yapılır: SQL Server 2005 Hata Ayıklamayı Etkinleştirme makalesinde bunun iki adımdan oluştuğuna işaret eder: (a) Visual Studio konak makinesinde, Özel Durumlar listesine eklemeli Devenv.exe
ve TCP 135 bağlantı noktasını açmanız gerekir; (b) Uzak (SQL) makinede TCP 135 bağlantı noktasını açmanız ve Özel Durumlar listesine eklemeniz sqlservr.exe
gerekir. Etki alanı ilkeniz IPSec üzerinden ağ iletişimi yapılmasını gerektiriyorsa, UDP 4500 ve UDP 500 bağlantı noktalarını açmanız gerekir.
Özet
Visual Studio, .NET uygulama kodu için hata ayıklama desteği sağlamaya ek olarak, SQL Server 2005 için çeşitli hata ayıklama seçenekleri de sağlar. Bu öğreticide bu seçeneklerden ikisini inceledik: Doğrudan Veritabanı Hata Ayıklama ve uygulama hata ayıklama. T-SQL veritabanı nesnesinde doğrudan hata ayıklamak için, Sunucu Gezgini aracılığıyla nesneyi bulun ve sağ tıklayın ve İçine Adımla'yı seçin. Bu, hata ayıklayıcıyı başlatır ve veritabanı nesnesinin ilk deyiminde durur; bu noktada nesne deyimlerinde ilerleyebilir ve parametre değerlerini görüntüleyebilir ve değiştirebilirsiniz. 1. Adımda saklı yordama geçmek Products_SelectByCategoryID
için bu yaklaşımı kullandık.
Uygulama hata ayıklama, kesme noktalarının doğrudan veritabanı nesneleri içinde ayarlanmasını sağlar. Kesme noktaları olan bir veritabanı nesnesi bir istemci uygulamasından (ASP.NET web uygulaması gibi) çağrıldığında, hata ayıklayıcı devraldıkça program durur. Belirli bir veritabanı nesnesinin çağrılmaya neden olduğu uygulama eylemini daha net bir şekilde gösterdiği için uygulama hata ayıklama yararlıdır. Ancak, Doğrudan Veritabanı Hata Ayıklama'dan biraz daha fazla yapılandırma ve kurulum gerektirir.
Veritabanı nesneleri SQL Server Projeleri aracılığıyla da hata ayıklanabilir. Sonraki öğreticide SQL Server Projelerini kullanmayı ve yönetilen veritabanı nesnelerini oluşturmak ve hatalarını ayıklamak için bunların nasıl kullanılacağını inceleyeceğiz.
Mutlu Programlama!
Yazar hakkında
Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Saat içinde 2.0. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.