Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
Microsoft SQL Server 2005, geliştiricilerin yönetilen kod aracılığıyla veritabanı nesneleri oluşturmasına olanak sağlamak için .NET Ortak Dil Çalışma Zamanı ile tümleştirilir. Bu öğreticide, Visual Basic veya C# kodunuzla yönetilen saklı yordamların ve yönetilen kullanıcı tanımlı işlevlerin nasıl oluşturulacağı gösterilmektedir. Ayrıca bu Visual Studio sürümlerinin bu tür yönetilen veritabanı nesnelerinde hata ayıklamanıza nasıl olanak tanıyacaklarını da görüyoruz.
Giriş
Microsoft SQL Server 2005 gibi veritabanları veri eklemek, değiştirmek ve almak için Transact-Yapılandırılmış Sorgu Dili (T-SQL) kullanır. Çoğu veritabanı sistemi, daha sonra tek, yeniden kullanılabilir bir birim olarak yürütülebilecek bir dizi SQL deyimini gruplandırma yapıları içerir. Saklı yordamlar bir örnektir. Bir diğeri de 9. Adımda daha ayrıntılı olarak inceleyebileceğimiz Kullanıcı Tanımlı İşlevler(UDF) yapısıdır.
Temel olarak SQL, veri kümeleriyle çalışmak için tasarlanmıştır. SELECT
, UPDATE
ve DELETE
deyimleri doğal olarak ilgili tablodaki tüm kayıtlara uygulanır ve yalnızca yan tümceleriyle WHERE
sınırlıdır. Ancak aynı anda tek bir kayıtla çalışmak ve skaler verileri işlemek için tasarlanmış birçok dil özelliği vardır. CURSOR
bir kayıt kümesinin tek tek döngüye alınmasına izin verir. , CHARINDEX
ve PATINDEX
gibi LEFT
dize işleme işlevleri skaler verilerle çalışır. SQL ayrıca ve WHILE
gibi IF
denetim akışı deyimlerini de içerir.
Microsoft SQL Server 2005'den önce saklı yordamlar ve UDF'ler yalnızca T-SQL deyimleri koleksiyonu olarak tanımlanabilirdi. Ancak 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 üzere tasarlanmıştır. Sonuç olarak, SQL Server 2005 veritabanındaki saklı yordamlar ve UDF'ler yönetilen kod kullanılarak oluşturulabilir. Diğer bir ifadeyle, Visual Basic sınıfında bir yöntem olarak bir saklı yordam veya UDF oluşturabilirsiniz. Bu, bu saklı yordamların ve UDF'lerin .NET Framework'te ve kendi özel sınıflarınızdan işlevselliği kullanmasına olanak tanır.
Bu öğreticide yönetilen saklı yordamların ve Kullanıcı Tanımlı İşlevlerin nasıl oluşturulacağını ve bunları Northwind veritabanımızla nasıl tümleştirebileceğimizi inceleyeceğiz. Haydi başlayalım!
Not
Yönetilen veritabanı nesneleri, SQL karşılıklarına göre bazı avantajlar sunar. Dil zenginliği ve aşinalığı ile mevcut kodu ve mantığı yeniden kullanabilmenin başlıca avantajlarıdır. Ancak yönetilen veritabanı nesneleri, çok fazla yordam mantığı içermeyen veri kümeleriyle çalışırken daha az verimli olabilir. Yönetilen kodu kullanmanın T-SQL'e kıyasla avantajları hakkında daha kapsamlı bir tartışma için, Veritabanı Nesneleri Oluşturmak için Yönetilen Kod Kullanmanın Avantajları'na göz atın.
1. Adım: Northwind Veritabanını App_Data Dışına Taşıma
Şimdiye kadar tüm öğreticilerimiz web uygulaması App_Data
klasöründe bir Microsoft SQL Server 2005 Express Sürüm veritabanı dosyası kullandı. Tüm dosyalar tek bir dizinde App_Data
bulunduğundan ve öğreticiyi test etmek için ek yapılandırma adımları gerekmediği için veritabanını basitleştirilmiş dağıtıma ve bu öğreticileri çalıştırmaya yerleştirme.
Ancak bu öğretici için Northwind veritabanını dışına App_Data
taşıyalım ve SQL Server 2005 Express Sürüm veritabanı örneğine açıkça kaydedelim. Bu öğreticinin adımlarını klasöründeki App_Data
veritabanıyla gerçekleştirebiliriz ancak veritabanını SQL Server 2005 Express Sürüm veritabanı örneğine açıkça kaydederek bu adımların bir kısmı çok daha basit hale getirilmiştir.
Bu öğreticinin indirmesinde adlı DataFiles
bir klasöre yerleştirilen ve NORTHWND_log.LDF
adlı iki veritabanı dosyası NORTHWND.MDF
bulunur. Öğreticileri kendi uygulamanızla birlikte takip ediyorsanız, Visual Studio'yu App_Data
kapatın ve ve NORTHWND_log.LDF
dosyalarını web sitesinin klasöründen web sitesinin dışındaki bir klasöre taşıyınNORTHWND.MDF
. Veritabanı dosyaları başka bir klasöre taşındıktan sonra Northwind veritabanını SQL Server 2005 Express Sürüm veritabanı örneğine kaydetmemiz gerekir. Bu işlem SQL Server Management Studio'dan yapılabilir. Bilgisayarınızda SQL Server 2005'in Express olmayan bir Sürümü yüklüyse, büyük olasılıkla Zaten Management Studio yüklüdür. Bilgisayarınızda yalnızca SQL Server 2005 Express Sürüm varsa Microsoft SQL Server Management Studio'yu indirip yüklemek için bir dakikanızı ayırın.
SQL Server Management Studio'yu başlatın. Şekil 1'de gösterildiği gibi, Management Studio hangi sunucuya bağlanacaklarını sorarak başlar. Sunucu adı olarak localhost\SQLExpress girin, Kimlik Doğrulaması açılan listesinde Windows Kimlik Doğrulaması'nı seçin ve Bağlan'a tıklayın.
Şekil 1: Uygun Veritabanı Örneğine Bağlanma
Bağlandıktan sonra, Nesne Gezgini penceresinde veritabanları, güvenlik bilgileri, yönetim seçenekleri gibi SQL Server 2005 Express Sürüm veritabanı örneğiyle ilgili bilgiler listelenir.
Klasörüne DataFiles
(veya taşımış olabileceğiniz her yere) Northwind veritabanını SQL Server 2005 Express Sürüm veritabanı örneğine eklememiz gerekir. Veritabanları klasörüne sağ tıklayın ve bağlam menüsünden Ekle seçeneğini belirleyin. Bu, Veritabanı Ekle iletişim kutusunu açar. Ekle düğmesine tıklayın, uygun NORTHWND.MDF
dosyaya gidin ve Tamam'a tıklayın. Bu noktada ekranınız Şekil 2'ye benzer görünmelidir.
Şekil 2: Uygun Veritabanı Örneğine bağlanma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
Management Studio aracılığıyla SQL Server 2005 Express Sürüm örneğine bağlanırken, Veritabanları Ekle iletişim kutusu Belgelerim gibi kullanıcı profili dizinlerinde detaya gitmenize izin vermez. Bu nedenle ve NORTHWND_log.LDF
dosyalarını kullanıcı dışı bir profil dizinine yerleştirdiğinden NORTHWND.MDF
emin olun.
Veritabanını eklemek için Tamam düğmesine tıklayın. VeritabanlarıNı Ekle iletişim kutusu kapatılır ve Nesne Gezgini artık yeni eklenen veritabanını listelemelidir. Northwind veritabanının adı gibi 9FE54661B32FDD967F51D71D0D5145CC_LINE ARTICLES\DATATUTORIALS\VOLUME 3\CSHARP\73\ASPNET_DATA_TUTORIAL_75_CS\APP_DATA\NORTHWND.MDF
olabilir. Veritabanına sağ tıklayıp Yeniden Adlandır'ı seçerek veritabanını Northwind olarak yeniden adlandırın.
Şekil 3: Veritabanını Northwind olarak yeniden adlandırma
2. Adım: Visual Studio'da Yeni Çözüm ve SQL Server Projesi Oluşturma
SQL Server 2005'te yönetilen saklı yordamlar veya UDF'ler oluşturmak için saklı yordamı ve UDF mantığını bir sınıfta Visual Basic kodu olarak yazacağız. Kod yazıldıktan sonra bu sınıfı bir derlemeye (dosya .dll
) derlememiz, derlemeyi SQL Server veritabanına kaydetmemiz ve sonra veritabanında derlemedeki ilgili yöntemi işaret eden bir saklı yordam veya UDF nesnesi oluşturmamız gerekir. Bu adımların tümü el ile gerçekleştirilebilir. Kodu herhangi bir metin düzenleyicisinde oluşturabilir, Visual Basic derleyicisini ()vbc.exe
kullanarak komut satırından derleyebilir, komutunu kullanarak CREATE ASSEMBLY
veya Management Studio'dan veritabanına kaydedebilir ve benzer yollarla saklı yordamı veya UDF nesnesini ekleyebiliriz. Neyse ki Visual Studio'nun Professional ve Team Systems sürümleri, bu görevleri otomatik hale getiren bir SQL Server Project türü içerir. Bu öğreticide, yönetilen bir saklı yordam ve UDF oluşturmak için SQL Server Project türünü kullanma adımlarını göstereceğiz.
Not
Visual Web Developer veya Visual Studio Standard sürümünü kullanıyorsanız, bunun yerine el ile yaklaşımı kullanmanız gerekir. 13. Adım, bu adımları el ile gerçekleştirmek için ayrıntılı yönergeler sağlar. Bu adımlar hangi Visual Studio sürümünü kullandığınızdan bağımsız olarak uygulanması gereken önemli SQL Server yapılandırma yönergelerini içerdiğinden, 13. Adımı okumadan önce 2. adımdan 12'ye kadar olan adımları okumanızı öneririz.
Visual Studio'yu açarak başlayın. Dosya menüsünde Yeni Proje'yi seçerek Yeni Proje iletişim kutusunu görüntüleyin (bkz. Şekil 4). Veritabanı proje türüne gidin ve sağ tarafta listelenen Şablonlar'dan yeni bir SQL Server Projesi oluşturmayı seçin. Bu projeyi ManagedDatabaseConstructs
adlandırmayı seçtim ve adlı Tutorial75
bir Çözüme yerleştirdim.
Şekil 4: Yeni BIR SQL Server Projesi Oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Çözüm ve SQL Server Projesi oluşturmak için Yeni Proje iletişim kutusundaki Tamam düğmesine tıklayın.
SQL Server Projesi belirli bir veritabanına bağlıdır. Sonuç olarak, yeni SQL Server Projesini oluşturduktan sonra hemen bu bilgileri belirtmemiz istenir. Şekil 5'te, 1. Adımda SQL Server 2005 Express Sürüm veritabanı örneğine kaydettiğimiz Northwind veritabanına işaret etmek için doldurulan Yeni Veritabanı Başvurusu iletişim kutusu gösterilmektedir.
Şekil 5: SQL Server Projesini Northwind Veritabanı ile ilişkilendirme
Bu projede oluşturacağımız yönetilen saklı yordamlarda ve UDF'lerde hata ayıklamak için bağlantı için SQL/CLR hata ayıklama desteğini etkinleştirmemiz gerekir. Bir SQL Server Projesi'ni yeni bir veritabanıyla ilişkilendirdiğinizde (Şekil 5'te yaptığımız gibi), Visual Studio bağlantıda SQL/CLR hata ayıklamasını etkinleştirmek isteyip istemediğinizi sorar (bkz. Şekil 6). Evet'e tıklayın.
Şekil 6: SQL/CLR Hata Ayıklamasını Etkinleştirme
Bu noktada, çözüme yeni SQL Server Projesi eklenmiştir. Adlı bir klasör Test Scripts
Test.sql
içerir ve projede oluşturulan yönetilen veritabanı nesnelerinde hata ayıklamak için kullanılır. 12. Adımda hata ayıklamaya bakacağız.
Artık bu projeye yeni yönetilen saklı yordamlar ve UDF'ler ekleyebiliriz, ancak bunu gerçekleştirmeden önce mevcut web uygulamamızı Çözüme ekleyelim. Dosya menüsünde Ekle seçeneğini belirleyin ve Var Olan Web Sitesi'ni seçin. Uygun web sitesi klasörüne gidin ve Tamam'a tıklayın. Şekil 7'de gösterildiği gibi, bu işlem Çözümü iki projeyi içerecek şekilde güncelleştirir: web sitesi ve ManagedDatabaseConstructs
SQL Server Projesi.
Şekil 7: Çözüm Gezgini artık iki proje içeriyor
içindeki NORTHWNDConnectionString
Web.config
değeri şu anda klasördeki dosyaya NORTHWND.MDF
App_Data
başvurur. Bu veritabanını öğesinden App_Data
kaldırdığımız ve SQL Server 2005 Express Sürüm veritabanı örneğine açıkça kaydettiğimiz için, buna karşılık olarak değeri güncelleştirmemiz NORTHWNDConnectionString
gerekir. Web.config
Dosyayı web sitesinde açın ve bağlantı dizesi okuyacak şekilde değerini değiştirinNORTHWNDConnectionString
: Data Source=localhost\SQLExpress;Initial Catalog=Northwind;Integrated Security=True
. Bu değişiklik sonrasında içindeki Web.config
bölümünüz <connectionStrings>
aşağıdakine benzer görünmelidir:
<connectionStrings>
<add name="NORTHWNDConnectionString" connectionString=
"Data Source=localhost\SQLExpress;Initial Catalog=Northwind;
Integrated Security=True;Pooling=false"
providerName="System.Data.SqlClient" />
</connectionStrings>
Not
Önceki öğreticide açıklandığı gibi, ASP.NET web sitesi gibi bir istemci uygulamasından SQL Server nesnesinde hata ayıklarken bağlantı havuzunu devre dışı bırakmamız gerekir. Yukarıda gösterilen bağlantı dizesi bağlantı havuzunu ( Pooling=false
) devre dışı bırakır. ASP.NET web sitesinden yönetilen saklı yordamlarda ve UDF'lerde hata ayıklamayı planlamıyorsanız, bağlantı havuzunu etkinleştirin.
3. Adım: Yönetilen Saklı Yordam Oluşturma
Northwind veritabanına yönetilen bir saklı yordam eklemek için öncelikle SQL Server Projesi'nde bir yöntem olarak saklı yordamı oluşturmamız gerekir. Çözüm Gezgini proje adına sağ tıklayın ManagedDatabaseConstructs
ve yeni bir öğe eklemeyi seçin. Bu, projeye eklenebilen yönetilen veritabanı nesnelerinin türlerini listeleyen Yeni Öğe Ekle iletişim kutusunu görüntüler. Şekil 8'de gösterildiği gibi, buna saklı yordamlar ve Kullanıcı Tanımlı İşlevler dahildir.
Yalnızca sonlandırılan tüm ürünleri döndüren bir saklı yordam ekleyerek başlayalım. Yeni saklı yordam dosyasını olarak adlandırın GetDiscontinuedProducts.vb
.
Şekil 8: Adlı GetDiscontinuedProducts.vb
Yeni Bir Saklı Yordam Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu, aşağıdaki içeriğe sahip yeni bir Visual Basic sınıf dosyası oluşturur:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Partial Public Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub GetDiscontinuedProducts ()
' Add your code here
End Sub
End Class
Saklı yordamın adlı StoredProcedures
bir sınıf dosyası içinde bir Shared
Partial
yöntem olarak uygulandığını unutmayın. Ayrıca, GetDiscontinuedProducts
yöntemi bir saklı yordam olarak işaretler özniteliği ile SqlProcedure
dekore edilmiştir.
Aşağıdaki kod bir SqlCommand
nesne oluşturur ve alanı 1'e eşit olan ürünler için tablodan Products
tüm sütunları döndüren Discontinued
bir SELECT
sorguya ayarlarCommandText
. Ardından komutunu yürütür ve sonuçları istemci uygulamasına geri gönderir. Bu kodu yöntemine GetDiscontinuedProducts
ekleyin.
' Create the command
Dim myCommand As New SqlCommand()
myCommand.CommandText = _
"SELECT ProductID, ProductName, SupplierID, CategoryID, " & _
" QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, " & _
" ReorderLevel, Discontinued " & _
"FROM Products " & _
"WHERE Discontinued = 1"
' Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand)
Tüm yönetilen veritabanı nesneleri, çağıranın bağlamını temsil eden bir SqlContext
nesneye erişebilir. özelliği SqlContext
aracılığıylaPipe
bir SqlPipe
nesneye erişim sağlar. Bu SqlPipe
nesne, SQL Server veritabanı ile çağıran uygulama arasında bilgi göndermek için kullanılır. Adından ExecuteAndSend
da anlaşılacağı gibi yöntemi , geçirilen SqlCommand
bir nesneyi yürütür ve sonuçları istemci uygulamasına geri gönderir.
Not
Yönetilen veritabanı nesneleri, küme tabanlı mantık yerine yordamsal mantık kullanan saklı yordamlar ve UDF'ler için en uygun olanıdır. Yordam mantığı, veri kümeleriyle satır satır çalışmayı veya skaler verilerle çalışmayı içerir. GetDiscontinuedProducts
Ancak yeni oluşturduğumuz yöntem yordam mantığı içermiyor. Bu nedenle, ideal olarak bir T-SQL saklı yordamı olarak uygulanır. Yönetilen saklı yordamları oluşturmak ve dağıtmak için gerekli adımları göstermek için yönetilen bir saklı yordam olarak uygulanır.
4. Adım: Yönetilen Saklı Yordamı Dağıtma
Bu kod tamamlandıktan sonra Northwind veritabanına dağıtmaya hazırız. SQL Server Projesi'nin dağıtılması kodu bir derlemeye derler, derlemeyi veritabanına kaydeder ve veritabanında karşılık gelen nesneleri oluşturarak bunları derlemedeki uygun yöntemlere bağlar. Dağıt seçeneği tarafından gerçekleştirilen tam görev kümesi, 13. Adım'da daha hassas bir şekilde yazılır. Çözüm Gezgini proje adına sağ tıklayın ManagedDatabaseConstructs
ve Dağıt seçeneğini belirleyin. Ancak dağıtım şu hatayla başarısız oluyor: 'EXTERNAL' yakınında yanlış söz dizimi. Bu özelliği etkinleştirmek için geçerli veritabanının uyumluluk düzeyini daha yüksek bir değere ayarlamanız gerekebilir. Saklı yordam sp_dbcmptlevel
için yardım bölümüne bakın.
Bu hata iletisi, derlemeyi Northwind veritabanına kaydetmeye çalışırken oluşur. Bir derlemeyi SQL Server 2005 veritabanına kaydetmek için veritabanının uyumluluk düzeyi 90 olarak ayarlanmalıdır. Varsayılan olarak, yeni SQL Server 2005 veritabanlarının uyumluluk düzeyi 90'dır. Ancak, Microsoft SQL Server 2000 kullanılarak oluşturulan veritabanlarının varsayılan uyumluluk düzeyi 80'tir. Northwind veritabanı başlangıçta bir Microsoft SQL Server 2000 veritabanı olduğundan uyumluluk düzeyi şu anda 80 olarak ayarlanmıştır ve bu nedenle yönetilen veritabanı nesnelerini kaydetmek için 90'a yükseltilmesi gerekir.
Veritabanının uyumluluk düzeyini güncelleştirmek için Management Studio'da bir Yeni Sorgu penceresi açın ve şunu girin:
exec sp_dbcmptlevel 'Northwind', 90
Yukarıdaki sorguyu çalıştırmak için Araç Çubuğu'ndaki Yürüt simgesine tıklayın.
Şekil 9: Northwind Veritabanı Uyumluluk Düzeyini Güncelleştirme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Uyumluluk düzeyini güncelleştirdikten sonra SQL Server Project'i yeniden dağıtın. Bu kez dağıtım hatasız tamamlanmalıdır.
SQL Server Management Studio'ya dönün, Nesne Gezgini Northwind veritabanına sağ tıklayın ve Yenile'yi seçin. Ardından Programlanabilirlik klasörünün detayına gidin ve Assemblies klasörünü genişletin. Şekil 10'da gösterildiği gibi Northwind veritabanı artık proje tarafından oluşturulan derlemeyi ManagedDatabaseConstructs
içerir.
Şekil 10: Derleme ManagedDatabaseConstructs
Artık Northwind Veritabanı ile Kayıtlı
Saklı Yordamlar klasörünü de genişletin. Burada adlı GetDiscontinuedProducts
bir saklı yordam görürsünüz. Bu saklı yordam dağıtım işlemi tarafından oluşturuldu ve derlemedeki GetDiscontinuedProducts
ManagedDatabaseConstructs
yöntemi işaret etti. GetDiscontinuedProducts
Saklı yordam yürütürken, sırayla yöntemini yürütürGetDiscontinuedProducts
. Bu yönetilen bir saklı yordam olduğundan, Management Studio aracılığıyla düzenlenemez (bu nedenle saklı yordam adının yanındaki kilit simgesi).
Şekil 11: GetDiscontinuedProducts
Saklı Yordam Saklı Yordamlar Klasöründe Listelenir
Yönetilen saklı yordamı çağırmadan önce aşmamız gereken bir engel daha vardır: veritabanı yönetilen kodun yürütülmesini engelleyecek şekilde yapılandırılır. Yeni bir sorgu penceresi açıp saklı yordamı yürüterek GetDiscontinuedProducts
bunu doğrulayın. Şu hata iletisini alırsınız: .NET Framework'te kullanıcı kodunun yürütülmesi devre dışı bırakıldı. 'clr özellikli yapılandırma seçeneğini etkinleştirin.
Northwind veritabanının yapılandırma bilgilerini incelemek için sorgu penceresine komutunu exec sp_configure
girin ve yürütebilirsiniz. Bu, clr etkin ayarının şu anda 0 olarak ayarlandığını gösterir.
Şekil 12: Clr özellikli Ayar Şu anda 0 olarak ayarlanmıştır (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 12'deki her yapılandırma ayarının yanında dört değer listelendiğini unutmayın: en düşük ve en yüksek değerler ile yapılandırma ve çalıştırma değerleri. Clr özellikli ayarın yapılandırma değerini güncelleştirmek için aşağıdaki komutu yürütür:
exec sp_configure 'clr enabled', 1
öğesini exec sp_configure
yeniden çalıştırırsanız yukarıdaki deyimin clr özellikli ayarın yapılandırma değerini 1 olarak güncelleştirdiğini ancak çalıştırma değerinin hala 0 olarak ayarlandığını görürsünüz. Bu yapılandırma değişikliğinin etkilenmesi için çalıştırma değerini geçerli yapılandırma değerine ayarlayacak komutu yürütmemiz RECONFIGURE
gerekir. Sorgu penceresine girip RECONFIGURE
Araç Çubuğu'ndaki Yürüt simgesine tıklamanız yeterlidir. Şimdi çalıştırırsanız exec sp_configure
clr etkin ayarı yapılandırma ve çalıştırma değerleri için 1 değerini görmeniz gerekir.
CLR etkinleştirilmiş yapılandırma tamamlandıktan sonra yönetilen GetDiscontinuedProducts
saklı yordamı çalıştırmaya hazırız. Sorgu penceresine komutunu exec
GetDiscontinuedProducts
girin ve yürütebilirsiniz. Saklı yordamı çağırmak, yöntemindeki ilgili yönetilen kodun GetDiscontinuedProducts
yürütülmesine neden olur. Bu kod, sonlandırılan tüm ürünleri döndürmek için bir SELECT
sorgu verir ve bu verileri bu örnekte SQL Server Management Studio olan çağıran uygulamaya döndürür. Management Studio bu sonuçları alır ve Sonuçlar penceresinde görüntüler.
Şekil 13: GetDiscontinuedProducts
Saklı Yordam, Sonlandırılan Tüm Ürünleri Döndürür (Tam boyutlu görüntüyü görüntülemek için tıklayın)
5. Adım: Giriş Parametrelerini Kabul Eden Yönetilen Saklı Yordamlar Oluşturma
Bu öğreticiler boyunca oluşturduğumuz sorguların ve saklı yordamların birçoğunda parametreler kullanılmıştır. Örneğin, Typed DataSet s TableAdapters için Yeni Saklı Yordamlar Oluşturma öğreticisinde adlı GetProductsByCategoryID
@CategoryID
bir giriş parametresini kabul eden adlı bir saklı yordam oluşturduk. Saklı yordam daha sonra, alanı sağlanan @CategoryID
parametrenin değeriyle eşleşen tüm ürünleri CategoryID
döndürdü.
Giriş parametrelerini kabul eden bir yönetilen saklı yordam oluşturmak için, yöntem tanımında bu parametreleri belirtmeniz yeterlidir. Bunu göstermek için adlı projeye GetProductsWithPriceLessThan
başka bir yönetilen saklı yordam ManagedDatabaseConstructs
ekleyelim. Bu yönetilen saklı yordam, fiyat belirten bir giriş parametresini kabul eder ve alanı parametre değerinden küçük olan UnitPrice
tüm ürünleri döndürür.
Projeye yeni bir saklı yordam eklemek için proje adına sağ tıklayın ManagedDatabaseConstructs
ve yeni bir saklı yordam eklemeyi seçin. Dosyayı GetProductsWithPriceLessThan.vb
olarak adlandırın. 3. Adımda gördüğümüz gibi, sınıfına Partial
yerleştirilen adlı GetProductsWithPriceLessThan
bir yöntemle yeni bir Visual Basic sınıf StoredProcedures
dosyası oluşturur.
yönteminin GetProductsWithPriceLessThan
tanımını, adlı price
bir SqlMoney
giriş parametresi kabul edip sorgu sonuçlarını yürütecek ve döndürecek kodu yazacak şekilde güncelleştirin:
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub GetProductsWithPriceLessThan(ByVal price As SqlMoney)
'Create the command
Dim myCommand As New SqlCommand()
myCommand.CommandText = _
"SELECT ProductID, ProductName, SupplierID, CategoryID, " & _
" QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, " & _
" ReorderLevel, Discontinued " & _
"FROM Products " & _
"WHERE UnitPrice < @MaxPrice"
myCommand.Parameters.AddWithValue("@MaxPrice", price)
' Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand)
End Sub
Yöntemin GetProductsWithPriceLessThan
tanımı ve kodu, 3. Adımda oluşturulan yöntemin tanımına ve koduna GetDiscontinuedProducts
benzer. Tek fark, yöntemin GetProductsWithPriceLessThan
giriş parametresi ()price
olarak kabul etme, s sorgusunun SqlCommand
bir parametre ()@MaxPrice
içermesi ve s Parameters
koleksiyonuna SqlCommand
bir parametrenin eklenmesi ve değişkenin değerinin price
atanmış olmasıdır.
Bu kodu ekledikten sonra SQL Server Project'i yeniden dağıtın. Ardından SQL Server Management Studio'ya dönün ve Saklı Yordamlar klasörünü yenileyin. Yeni bir girdi görmeniz gerekir: GetProductsWithPriceLessThan
. Sorgu penceresinden komutunu girin ve çalıştırın. Bu komut exec GetProductsWithPriceLessThan 25
, Şekil 14'ün gösterildiği gibi 25 TL'den küçük tüm ürünleri listeler.
Şekil 14: 25 ABD Doları Altındaki Ürünler Görüntüleniyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
6. Adım: Veri Erişim Katmanından Yönetilen Saklı Yordamı Çağırma
Bu noktada projeye ve GetProductsWithPriceLessThan
yönetilen saklı yordamları ManagedDatabaseConstructs
ekledik GetDiscontinuedProducts
ve bunları Northwind SQL Server veritabanına kaydettik. Ayrıca bu yönetilen saklı yordamları SQL Server Management Studio'dan da çağırdık (bkz. Şekil 13 ve 14). Ancak ASP.NET uygulamamızın bu yönetilen saklı yordamları kullanabilmesi için bunları mimarideki Veri Erişimi ve İş Mantığı Katmanları'na eklememiz gerekir. Bu adımda, Türü Belirlenmiş DataSet'in NorthwindWithSprocs
TableAdapters öğreticisi için Yeni Saklı Yordamlar Oluşturma öğreticisinde oluşturulan Türü Belirlenmiş DataSet'e iki yeni yöntem ProductsTableAdapter
ekleyeceğiz. 7. Adımda BLL'ye karşılık gelen yöntemleri ekleyeceğiz.
NorthwindWithSprocs
Visual Studio'da Yazılan Veri Kümesi'ni açın ve adlı GetDiscontinuedProducts
öğesine ProductsTableAdapter
yeni bir yöntem ekleyerek başlayın. TableAdapter'a yeni bir yöntem eklemek için Tasarımcı'da TableAdapter adına sağ tıklayın ve bağlam menüsünden Sorgu Ekle seçeneğini belirleyin.
Not
Northwind veritabanını klasörden App_Data
SQL Server 2005 Express Sürüm veritabanı örneğine taşıdığımızdan, Web.config'deki ilgili bağlantı dizesi bu değişikliği yansıtacak şekilde güncelleştirilmiş olması zorunludur. 2. Adım'da içindeki Web.config
değeri güncelleştirme konusunu NORTHWNDConnectionString
ele aldık. Bu güncelleştirmeyi yapmayı unuttuysanız Sorgu eklenemedi hata iletisini görürsünüz. TableAdapter'a yeni bir yöntem eklemeye çalışırken iletişim kutusunda nesne Web.config
için bağlantı NORTHWNDConnectionString
bulunamıyor. Bu hatayı çözmek için Tamam'a Web.config
tıklayın ve 2. Adımda açıklandığı gibi değeri güncelleştirin NORTHWNDConnectionString
. Ardından yöntemini TableAdapter'a yeniden eklemeyi deneyin. Bu kez hatasız çalışması gerekir.
Yeni bir yöntem eklendiğinde, geçmiş öğreticilerde birçok kez kullandığımız TableAdapter Sorgu Yapılandırması sihirbazı başlatılır. İlk adım, TableAdapter'ın veritabanına nasıl erişeceğini belirtmemizi ister: geçici bir SQL deyimi veya yeni veya mevcut bir saklı yordam aracılığıyla. Yönetilen saklı yordamı önceden oluşturup veritabanına kaydettik GetDiscontinuedProducts
, Mevcut saklı yordamı kullan seçeneğini belirleyin ve İleri'ye basın.
Şekil 15: Mevcut saklı yordamı kullan Seçeneğini belirleyin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sonraki ekranda yöntemin çağıracağı saklı yordam istenir. Açılan listeden GetDiscontinuedProducts
yönetilen saklı yordamı seçin ve İleri'ye basın.
Şekil 16: Yönetilen Saklı Yordamı seçin GetDiscontinuedProducts
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ardından saklı yordamın satır mı, tek değer mi yoksa hiçbir şey mi döndüreceğini belirtmemiz istenir. GetDiscontinuedProducts
Sonlandırılan ürün satırları kümesini döndürdüğünden, ilk seçeneği ( Tablo verileri ) seçin ve İleri'ye tıklayın.
Şekil 17: Tablosal Veri Seçeneğini seçin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Son sihirbaz ekranı, kullanılan veri erişim desenlerini ve sonuçta elde edilen yöntemlerin adlarını belirtmemizi sağlar. Her iki onay kutusunu da işaretli bırakın ve ve yöntemlerini FillByDiscontinued
GetDiscontinuedProducts
adlandırın. Sihirbazı tamamlamak için Son’a tıklayın.
Şekil 18: Yöntemleri FillByDiscontinued
adlandırın ve GetDiscontinuedProducts
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Yönetilen saklı yordam için ve GetProductsWithPriceLessThan
ProductsTableAdapter
adlı FillByPriceLessThan
yöntemler oluşturmak için GetProductsWithPriceLessThan
bu adımları yineleyin.
Şekil 19'da ve GetProductsWithPriceLessThan
yönetilen saklı yordamlar ProductsTableAdapter
için yöntemleri ekledikten sonra DataSet Designer'ın GetDiscontinuedProducts
ekran görüntüsü gösterilmektedir.
Şekil 19: Bu ProductsTableAdapter
Adımda Eklenen Yeni Yöntemleri Içerir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
7. Adım: İş Mantığı Katmanına Karşılık Gelen Yöntemler Ekleme
Veri Erişim Katmanı'nı, 4. ve 5. Adımlarda eklenen yönetilen saklı yordamları çağırma yöntemlerini içerecek şekilde güncelleştirdiğimize göre, İş Mantığı Katmanı'na ilgili yöntemleri eklememiz gerekir. Sınıfına aşağıdaki iki yöntemi ProductsBLLWithSprocs
ekleyin:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetDiscontinuedProducts() As NorthwindWithSprocs.ProductsDataTable
Return Adapter.GetDiscontinuedProducts()
End Function
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetProductsWithPriceLessThan(ByVal priceLessThan As Decimal) _
As NorthwindWithSprocs.ProductsDataTable
Return Adapter.GetProductsWithPriceLessThan(priceLessThan)
End Function
Her iki yöntem de yalnızca ilgili DAL yöntemini çağırır ve örneği döndürür ProductsDataTable
. Her yöntemin DataObjectMethodAttribute
üzerindeki işaretleme, bu yöntemlerin ObjectDataSource'un Veri Kaynağını Yapılandırma sihirbazının SELECT sekmesindeki açılan listeye eklenmesine neden olur.
8. Adım: Yönetilen Saklı Yordamları Sunu Katmanından Çağırma
İş Mantığı ve Veri Erişim Katmanları, ve GetProductsWithPriceLessThan
yönetilen saklı yordamları çağırma GetDiscontinuedProducts
desteği içerecek şekilde genişletildiğinde, artık bu saklı yordam sonuçlarını bir ASP.NET sayfası üzerinden görüntüleyebiliriz.
Klasördeki AdvancedDAL
sayfayı ManagedFunctionsAndSprocs.aspx
açın ve Araç Kutusu'ndan GridView'ı Tasarımcı'ya sürükleyin. GridView s ID
özelliğini DiscontinuedProducts
akıllı etiketinden ve olarak ayarlayın, bunu adlı DiscontinuedProductsDataSource
yeni bir ObjectDataSource'a bağlayın. ObjectDataSource'un verilerini sınıf GetDiscontinuedProducts
yönteminden ProductsBLLWithSprocs
çekecek şekilde yapılandırın.
Şekil 20: ObjectDataSource'ı Sınıfı Kullanacak ProductsBLLWithSprocs
Şekilde Yapılandırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 21: SELECT Sekmesindeki Açılan Listeden Yöntemi Seçin GetDiscontinuedProducts
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu kılavuz yalnızca ürün bilgilerini görüntülemek için kullanılacağından, UPDATE, INSERT ve DELETE sekmelerindeki açılan listeleri (Yok) olarak ayarlayın ve son'a tıklayın.
Sihirbazı tamamladıktan sonra, Visual Studio içindeki her veri alanı ProductsDataTable
için otomatik olarak bir BoundField veya CheckBoxField ekler. ve Discontinued
dışındaki tüm bu alanları kaldırmak için ProductName
bir dakikanızı ayırın. Bu noktada GridView ve ObjectDataSource bildirim temelli işaretlemeniz aşağıdakine benzer görünmelidir:
<asp:GridView ID="DiscontinuedProducts" runat="server"
AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="DiscontinuedProductsDataSource">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="ProductName"
SortExpression="ProductName" />
<asp:CheckBoxField DataField="Discontinued"
HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="DiscontinuedProductsDataSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDiscontinuedProducts" TypeName="ProductsBLLWithSprocs">
</asp:ObjectDataSource>
Bu sayfayı bir tarayıcı üzerinden görüntülemek için biraz zaman ayırın. Sayfa ziyaret edildiğinde, ObjectDataSource sınıfın ProductsBLLWithSprocs
GetDiscontinuedProducts
yöntemini çağırır. 7. Adımda gördüğümüz gibi, bu yöntem saklı yordamı çağıran DAL sınıfı ProductsDataTable
s GetDiscontinuedProducts
yöntemine GetDiscontinuedProducts
çağrır. Bu saklı yordam yönetilen bir saklı yordamdır ve 3. Adımda oluşturduğumuz kodu yürütür ve sonlandırılan ürünleri döndürür.
Yönetilen saklı yordam tarafından döndürülen sonuçlar DAL tarafından bir ProductsDataTable
içinde paketlenir ve ardından BLL'ye döndürülür, bu da bunları GridView'a bağlanıp görüntülendiği Sunu Katmanına döndürür. Beklendiği gibi kılavuzda, kullanımdan kaldırılan ürünler listelenir.
Şekil 22: Sonlandırılan Ürünler Listeleniyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Daha fazla alıştırma yapmak için sayfaya bir TextBox ve başka bir GridView ekleyin. Bu GridView'unGetProductsWithPriceLessThan
, sınıfın yöntemini çağırarak TextBox'a girilen tutardan küçük ürünleri görüntülemesini ProductsBLLWithSprocs
sağlayın.
9. Adım: T-SQL UDF'leri Oluşturma ve Çağırma
Kullanıcı Tanımlı İşlevler veya UDF'ler, programlama dillerindeki işlevlerin semantiğini yakından taklit eden veritabanı nesneleridir. Visual Basic'teki bir işlev gibi UDF'ler de değişken sayıda giriş parametresi içerebilir ve belirli bir türde bir değer döndürebilir. UDF skaler veriler (dize, tamsayı vb.) veya tablosal veriler döndürebilir. Skaler veri türü döndüren bir UDF ile başlayarak her iki UDF türüne de hızlıca göz atalım.
Aşağıdaki UDF, belirli bir ürün için stokun tahmini değerini hesaplar. Bunu, belirli bir ürünün , UnitsInStock
ve Discontinued
değerleri olmak üzere UnitPrice
üç giriş parametresini alarak yapar ve türünde money
bir değer döndürür. ile çarparak UnitPrice
UnitsInStock
envanterin tahmini değerini hesaplar. Sonlandırılan öğeler için bu değer yarıya indirilir.
CREATE FUNCTION udf_ComputeInventoryValue
(
@UnitPrice money,
@UnitsInStock smallint,
@Discontinued bit
)
RETURNS money
AS
BEGIN
DECLARE @Value decimal
SET @Value = ISNULL(@UnitPrice, 0) * ISNULL(@UnitsInStock, 0)
IF @Discontinued = 1
SET @Value = @Value * 0.5
RETURN @Value
END
Bu UDF veritabanına eklendikten sonra, Management Studio aracılığıyla Programlanabilirlik klasörünü, İşlevler'i ve ardından Skaler-value İşlevleri'ni genişleterek bulunabilir. Şu şekilde bir SELECT
sorguda kullanılabilir:
SELECT ProductID, ProductName, dbo.udf_ComputeInventoryValue
(UnitPrice, UnitsInStock, Discontinued) as InventoryValue
FROM Products
ORDER BY InventoryValue DESC
UDF'yi udf_ComputeInventoryValue
Northwind veritabanına ekledim; Şekil 23'de, Management Studio aracılığıyla görüntülendiğinde yukarıdaki SELECT
sorgunun çıkışı gösterilmektedir. Ayrıca UDF'nin Nesne Gezgini Scalar-value functions klasörünün altında listelendiğini unutmayın.
Şekil 23: Her Ürünün Stok Değerleri Listelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
UDF'ler tablo verileri de döndürebilir. Örneğin, belirli bir kategoriye ait ürünleri döndüren bir UDF oluşturabiliriz:
CREATE FUNCTION dbo.udf_GetProductsByCategoryID
(
@CategoryID int
)
RETURNS TABLE
AS
RETURN
(
SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID
)
udf_GetProductsByCategoryID
UDF bir @CategoryID
giriş parametresi kabul eder ve belirtilen SELECT
sorgunun sonuçlarını döndürür. Bu UDF oluşturulduktan sonra sorgunun FROM
(veya JOIN
) yan tümcesinde SELECT
başvurulabilir. Aşağıdaki örnek, içeceklerin ProductID
her biri için , ProductName
ve CategoryID
değerlerini döndürür.
SELECT ProductID, ProductName, CategoryID
FROM dbo.udf_GetProductsByCategoryID(1)
UDF'yi udf_GetProductsByCategoryID
Northwind veritabanına ekledim; Şekil 24'de, Management Studio aracılığıyla görüntülendiğinde yukarıdaki SELECT
sorgunun çıkışı gösterilmektedir. Tablosal veriler döndüren UDF'ler Nesne Gezgini Tablo değeri İşlevleri klasöründe bulunabilir.
Şekil 24: ProductID
, ProductName
ve CategoryID
Her İçecek için Listelenmiştir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
UDF oluşturma ve kullanma hakkında daha fazla bilgi için Bkz . Kullanıcı Tanımlı İşlevlere Giriş. Ayrıca Kullanıcı Tanımlı İşlevlerin Avantajları ve Dezavantajları'ne göz atın.
10. Adım: Yönetilen UDF Oluşturma
udf_ComputeInventoryValue
Yukarıdaki örneklerde oluşturulan ve udf_GetProductsByCategoryID
UDF'leri T-SQL veritabanı nesneleridir. SQL Server 2005, 3. ve 5. Adımlardan yönetilen saklı yordamlar gibi projeye eklenebilen ManagedDatabaseConstructs
yönetilen UDF'leri de destekler. Bu adım için, yönetilen kodda UDF'yi udf_ComputeInventoryValue
uygulayalım.
Projeye yönetilen UDF eklemek içinManagedDatabaseConstructs
, Çözüm Gezgini'da proje adına sağ tıklayın ve Yeni Öğe Ekle'yi seçin. Yeni Öğe Ekle iletişim kutusundan Kullanıcı Tanımlı Şablonu seçin ve yeni UDF dosyasını udf_ComputeInventoryValue_Managed.vb
adlandırın.
Şekil 25: Projeye Yeni Bir Yönetilen UDF ManagedDatabaseConstructs
Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Kullanıcı Tanımlı İşlev şablonu, adı sınıf dosyasının adıyla (udf_ComputeInventoryValue_Managed
bu örnekte) aynı olan bir yöntemle adlı UserDefinedFunctions
bir sınıf oluştururPartial
. Bu yöntem, yöntemi yönetilen UDF olarak işaretleyen özniteliği kullanılarak SqlFunction
dekore edilmiştir.
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Partial Public Class UserDefinedFunctions
<Microsoft.SqlServer.Server.SqlFunction()> _
Public Shared Function udf_ComputeInventoryValue_Managed() As SqlString
' Add your code here
Return New SqlString("Hello")
End Function
End Class
udf_ComputeInventoryValue
yöntemi şu anda bir nesne döndürür ve herhangi bir SqlString
giriş parametresi kabul etmez. Yöntem tanımını, , UnitsInStock
ve Discontinued
- UnitPrice
üç giriş parametresini kabul edip bir nesne döndürecek şekilde SqlMoney
güncelleştirmemiz gerekir. Stok değerini hesaplama mantığı, T-SQL udf_ComputeInventoryValue
UDF'deki mantıkla aynıdır.
<Microsoft.SqlServer.Server.SqlFunction()> _
Public Shared Function udf_ComputeInventoryValue_Managed _
(UnitPrice As SqlMoney, UnitsInStock As SqlInt16, Discontinued As SqlBoolean) _
As SqlMoney
Dim inventoryValue As SqlMoney = 0
If Not UnitPrice.IsNull AndAlso Not UnitsInStock.IsNull Then
inventoryValue = UnitPrice * UnitsInStock
If Discontinued = True Then
inventoryValue = inventoryValue * New SqlMoney(0.5)
End If
End If
Return inventoryValue
End Function
UDF yönteminin giriş parametrelerinin ilgili SQL türlerinden olduğunu unutmayın: SqlMoney
alanı için UnitPrice
, SqlInt16
için UnitsInStock
ve SqlBoolean
için Discontinued
. Bu veri türleri tabloda tanımlanan Products
türleri yansıtır: UnitPrice
sütun türünde, türündeki UnitsInStock
money
sütun ve türündeki smallint
Discontinued
bit
sütundur.
Kod, 0 değerine atanmış adlı inventoryValue
bir örnek oluşturarak SqlMoney
başlar. Tablo, Products
ve UnitsInStock
sütunlarında veritabanı NULL
değerlerine UnitsInPrice
izin verir. Bu nedenle, önce bu değerlerin s içerip içermediğini NULL
denetlememiz gerekir ve bunu nesneninIsNull
SqlMoney
özelliği aracılığıyla yaparız. Hem hem de UnitPrice
UnitsInStock
olmayanNULL
değerler içeriyorsa, öğesini ikisinin ürünü olarak hesaplarız inventoryValue
. Ardından doğruysa Discontinued
değeri yarıya indiriyoruz.
Not
SqlMoney
nesnesi yalnızca iki SqlMoney
örneğin birlikte çarpılmasına izin verir. Bir örneğin değişmez değer kayan nokta sayısıyla çarpılmasına izin SqlMoney
vermez. Bu nedenle, yarıya inventoryValue
inmek için 0,5 değerine sahip yeni SqlMoney
bir örnekle çarpıyoruz.
11. Adım: Yönetilen UDF'yi Dağıtma
Artık yönetilen UDF oluşturulduğuna göre, bunu Northwind veritabanına dağıtmaya hazırız. 4. Adımda gördüğümüz gibi, SQL Server Projesindeki yönetilen nesneler Çözüm Gezgini proje adına sağ tıklayıp bağlam menüsünden Dağıt seçeneği seçilerek dağıtılır.
Projeyi dağıttıktan sonra SQL Server Management Studio'ya dönün ve Scalar değerli İşlevler klasörünü yenileyin. Şimdi iki giriş görmeniz gerekir:
dbo.udf_ComputeInventoryValue
- 9. Adımda oluşturulan T-SQL UDF vedbo.udf ComputeInventoryValue_Managed
- 10. Adımda oluşturulan ve yeni dağıtılan yönetilen UDF.
Bu yönetilen UDF'yi test etmek için Management Studio'dan aşağıdaki sorguyu yürütür:
SELECT ProductID, ProductName,
dbo.udf_ComputeInventoryValue_Managed(
UnitPrice,
UnitsInStock,
Discontinued
) as InventoryValue
FROM Products
ORDER BY InventoryValue DESC
Bu komut, T-SQL udf_ComputeInventoryValue
UDF yerine yönetilen udf ComputeInventoryValue_Managed
UDF'yi kullanır, ancak çıkış aynıdır. UDF çıktısının ekran görüntüsünü görmek için Şekil 23'e geri bakın.
12. Adım: Yönetilen Veritabanı Nesnesinde Hata Ayıklama
Saklı Yordamlarda Hata Ayıklama öğreticisinde, Visual Studio aracılığıyla SQL Server'da hata ayıklamaya yönelik üç seçeneği ele aldık: Sql Server Projesinden Doğrudan Veritabanı Hata Ayıklama, Uygulama Hata Ayıklama ve Hata Ayıklama. Yönetilen veritabanı nesneleri Doğrudan Veritabanı Hata Ayıklama aracılığıyla hata ayıklanamaz, ancak bir istemci uygulamasından ve doğrudan SQL Server Projesi'nden hata ayıklanabilir. Ancak hata ayıklamanın çalışması için SQL Server 2005 veritabanının SQL/CLR hata ayıklamasına izin vermesi gerekir. Visual Studio projesini ManagedDatabaseConstructs
ilk oluşturduğunuzda SQL/CLR hata ayıklamasını etkinleştirmek isteyip istemediğinizi sorduğunu hatırlayın (bkz. 2. Adımdaki Şekil 6). Bu ayar, Sunucu Gezgini penceresinden veritabanına sağ tıklanarak değiştirilebilir.
Şekil 26: Veritabanının SQL/CLR Hata Ayıklamasına İzin Verdiğinden Emin Olun
Yönetilen saklı yordamda hata ayıklamak istediğimizi GetProductsWithPriceLessThan
düşünün. Başlangıç olarak yönteminin kodu GetProductsWithPriceLessThan
içinde bir kesme noktası ayarlayacağız.
Şekil 27: Yöntemde GetProductsWithPriceLessThan
Kesme Noktası Ayarlama (Tam boyutlu görüntüyü görüntülemek için tıklayın)
İlk olarak SQL Server Projesinden yönetilen veritabanı nesnelerinde hata ayıklamaya bakalım. Çözümümüz web sitemizle birlikte SQL Server Projesi olmak üzere iki proje ManagedDatabaseConstructs
içerdiğinden, SQL Server Projesi'nden hata ayıklama yapmak için hata ayıklamaya başladığımızda Visual Studio'ya SQL Server Projesi'ni ManagedDatabaseConstructs
başlatması için talimat vermemiz gerekir. Çözüm Gezgini'da projeye sağ tıklayın ManagedDatabaseConstructs
ve bağlam menüsünden Başlangıç Projesi Olarak Ayarla seçeneğini belirleyin.
ManagedDatabaseConstructs
Proje hata ayıklayıcıdan başlatıldığında, klasörde bulunan Test Scripts
dosyada Test.sql
SQL deyimlerini yürütür. Örneğin, yönetilen saklı yordamı test GetProductsWithPriceLessThan
etmek için mevcut Test.sql
dosya içeriğini aşağıdaki deyimle değiştirin; bu deyim, 14,95 değerini geçirerek @CategoryID
yönetilen saklı yordamı çağırırGetProductsWithPriceLessThan
:
exec GetProductsWithPriceLessThan 14.95
yukarıdaki betiği içine Test.sql
girdikten sonra, Hata Ayıkla menüsüne gidip Hata Ayıklamayı Başlat'ı seçerek veya Araç Çubuğu'ndaki F5 veya yeşil yürütme simgesine tıklayarak hata ayıklamaya başlayın. Bu işlem, Projeleri Çözüm içinde oluşturur, yönetilen veritabanı nesnelerini Northwind veritabanına dağıtır ve betiği yürütür Test.sql
. Bu noktada kesme noktasına isabet edilecek ve yöntemi adım GetProductsWithPriceLessThan
adım ilerleyebilir, giriş parametrelerinin değerlerini inceleyebilir ve bu şekilde devam edebiliriz.
Şekil 28: Yöntemdeki GetProductsWithPriceLessThan
Kesme Noktası İsabet Edildi (Tam boyutlu görüntüyü görüntülemek için tıklayın)
SQL veritabanı nesnesinin bir istemci uygulaması aracılığıyla hata ayıklaması için, veritabanının uygulama hata ayıklamasını destekleyecek şekilde yapılandırılması zorunludur. Sunucu Gezgini'nde veritabanına sağ tıklayın ve Uygulama Hata Ayıklama seçeneğinin işaretli olduğundan emin olun. Ayrıca, ASP.NET uygulamasını SQL Hata Ayıklayıcısı ile tümleştirecek ve bağlantı havuzunu devre dışı bırakacak şekilde yapılandırmamız gerekir. Bu adımlar, Saklı Yordamlarda Hata Ayıklama öğreticisinin 2. Adımında ayrıntılı olarak ele alınmaktadır.
ASP.NET uygulamasını ve veritabanını yapılandırdıktan sonra, ASP.NET web sitesini başlangıç projesi olarak ayarlayın ve hata ayıklamaya başlayın. Kesme noktası olan yönetilen nesnelerden birini çağıran bir sayfayı ziyaret ederseniz uygulama durur ve denetim hata ayıklayıcıya devredilir ve burada Şekil 28'de gösterildiği gibi kodda adım adım ilerleyebilirsiniz.
13. Adım: Yönetilen Veritabanı Nesnelerini El ile Derleme ve Dağıtma
SQL Server Projeleri yönetilen veritabanı nesnelerini oluşturmayı, derlemeyi ve dağıtmayı kolaylaştırır. Ne yazık ki SQL Server Projeleri yalnızca Visual Studio'nun Professional ve Team Systems sürümlerinde kullanılabilir. Visual Web Developer veya Visual Studio Standard Sürümü kullanıyorsanız ve yönetilen veritabanı nesnelerini kullanmak istiyorsanız, bunları el ile oluşturup dağıtmanız gerekir. Bu dört adımdan oluşur:
- Yönetilen veritabanı nesnesinin kaynak kodunu içeren bir dosya oluşturun,
- nesnesini bir derlemede derleyin,
- Derlemeyi SQL Server 2005 veritabanına kaydedin ve
- SQL Server'da derlemedeki uygun yönteme işaret eden bir veritabanı nesnesi oluşturun.
Bu görevleri göstermek için, belirtilen değerden büyük olan ürünleri UnitPrice
döndüren yeni bir yönetilen saklı yordam oluşturalım. Bilgisayarınızda adlı GetProductsWithPriceGreaterThan.vb
yeni bir dosya oluşturun ve dosyaya aşağıdaki kodu girin (bunu yapmak için Visual Studio, Not Defteri veya herhangi bir metin düzenleyicisini kullanabilirsiniz):
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Partial Public Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub GetProductsWithPriceGreaterThan(ByVal price As SqlMoney)
'Create the command
Dim myCommand As New SqlCommand()
myCommand.CommandText = _
"SELECT ProductID, ProductName, SupplierID, CategoryID, " & _
" QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, " & _
" ReorderLevel, Discontinued " & _
"FROM Products " & _
"WHERE UnitPrice > @MinPrice"
myCommand.Parameters.AddWithValue("@MinPrice", price)
' Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand)
End Sub
End Class
Bu kod, 5. Adımda oluşturulan yöntemin GetProductsWithPriceLessThan
koduyla neredeyse aynıdır. Tek farklar yöntem adları, WHERE
yan tümcesi ve sorguda kullanılan parametre adıdır. yöntemine GetProductsWithPriceLessThan
döndüğünüzde yan tümcesi WHERE
şu şekildedir: WHERE UnitPrice < @MaxPrice
. Burada, içinde GetProductsWithPriceGreaterThan
şunu kullanırız: WHERE UnitPrice > @MinPrice
.
Şimdi bu sınıfı bir derlemede derlememiz gerekiyor. Komut satırından, dosyayı kaydettiğiniz GetProductsWithPriceGreaterThan.vb
dizine gidin ve C# derleyicisini (csc.exe
) kullanarak sınıf dosyasını bir derlemeye derleyin:
vbc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.vb
içinde v bc.exe
içeren klasör sistem PATH
içinde değilse, yoluna tam olarak başvurmanız gerekir, %WINDOWS%\Microsoft.NET\Framework\version\
örneğin:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.vb
Şekil 29: Derlemede Derleme GetProductsWithPriceGreaterThan.vb
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
bayrağı, /t
Visual Basic sınıf dosyasının bir DLL'de (yürütülebilir dosya yerine) derlenmesi gerektiğini belirtir. bayrağı, /out
sonuçta elde edilen derlemenin adını belirtir.
Not
Sınıf dosyasını komut satırından GetProductsWithPriceGreaterThan.vb
derlemek yerine alternatif olarak Visual Basic Express Edition'ı kullanabilir veya Visual Studio Standard Sürümü'de ayrı bir Sınıf Kitaplığı projesi oluşturabilirsiniz. S ren Jacob Lauritsen, saklı yordam için GetProductsWithPriceGreaterThan
kod ve 3., 5. ve 10. Adımlarda oluşturulan iki yönetilen saklı yordam ve UDF ile böyle bir Visual Basic Express Edition projesi sağlamıştır. S ren projesi, ilgili veritabanı nesnelerini eklemek için gereken T-SQL komutlarını da içerir.
Kod bir derlemede derlendiğinde, derlemeyi SQL Server 2005 veritabanına kaydetmeye hazırız. Bu, T-SQL aracılığıyla, komutu CREATE ASSEMBLY
kullanılarak veya SQL Server Management Studio aracılığıyla gerçekleştirilebilir. Şimdi Management Studio'yu kullanmaya odaklanalım.
Management Studio'dan Northwind veritabanındaki Programmability klasörünü genişletin. Alt klasörlerinden biri Bütünleştirilmiş Kodlar'dır. Veritabanına el ile yeni bir Derleme eklemek için Derlemeler klasörüne sağ tıklayın ve bağlam menüsünden Yeni Derleme'yi seçin. Bu, Yeni Derleme iletişim kutusunu görüntüler (bkz. Şekil 30). Gözat düğmesine tıklayın, derlediğimiz derlemeyi ManuallyCreatedDBObjects.dll
seçin ve ardından Derlemeyi veritabanına eklemek için Tamam'a tıklayın. Derlemeyi ManuallyCreatedDBObjects.dll
Nesne Gezgini görmemeniz gerekir.
Şekil 30: Derlemeyi ManuallyCreatedDBObjects.dll
Veritabanına Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 31: Nesne Gezgini ManuallyCreatedDBObjects.dll
Derlemeyi Northwind veritabanına eklemiş olsak da, henüz bir saklı yordamı derlemedeki GetProductsWithPriceGreaterThan
yöntemiyle ilişkilendirmedik. Bunu yapmak için yeni bir sorgu penceresi açın ve aşağıdaki betiği çalıştırın:
CREATE PROCEDURE [dbo].[GetProductsWithPriceGreaterThan]
(
@price money
)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [ManuallyCreatedDBObjects].[StoredProcedures].[GetProductsWithPriceGreaterThan]
GO
Bu, adlı GetProductsWithPriceGreaterThan
Northwind veritabanında yeni bir saklı yordam oluşturur ve bunu yönetilen yöntemle GetProductsWithPriceGreaterThan
ilişkilendirir (derlemedeki ManuallyCreatedDBObjects
sınıfındadırStoredProcedures
).
Yukarıdaki betiği yürüttkten sonra Nesne Gezgini Saklı Yordamlar klasörünü yenileyin. Yanında kilit simgesi bulunan yeni bir saklı yordam girdisi GetProductsWithPriceGreaterThan
görmeniz gerekir. Bu saklı yordamı test etmek için sorgu penceresine aşağıdaki betiği girin ve yürütebilirsiniz:
exec GetProductsWithPriceGreaterThan 24.95
Şekil 32'de gösterildiği gibi, yukarıdaki komut 24,95 ABD dolarından büyük olan ürünlere UnitPrice
ilişkin bilgileri görüntüler.
Şekil 32: ManuallyCreatedDBObjects.dll
Nesne Gezgini Listelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
Microsoft SQL Server 2005, veritabanı nesnelerinin yönetilen kod kullanılarak oluşturulmasını sağlayan Ortak Dil Çalışma Zamanı (CLR) ile tümleştirme sağlar. Daha önce, bu veritabanı nesneleri yalnızca T-SQL kullanılarak oluşturulabilirdi, ancak şimdi Visual Basic gibi .NET programlama dillerini kullanarak bu nesneleri oluşturabiliriz. Bu öğreticide iki yönetilen saklı yordam ve yönetilen Kullanıcı Tanımlı İşlev oluşturduk.
Visual Studio'nun SQL Server Proje türü yönetilen veritabanı nesnelerinin oluşturulmasını, derlenmesi ve dağıtılmasını kolaylaştırır. Ayrıca zengin hata ayıklama desteği sunar. Ancak, SQL Server Project türleri yalnızca Visual Studio'nun Professional ve Team Systems sürümlerinde kullanılabilir. Visual Web Developer veya Visual Studio Standard Sürümü kullananlar için oluşturma, derleme ve dağıtım adımlarının 13. Adımda gördüğümüz gibi el ile gerçekleştirilmesi gerekir.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Kullanıcı Tanımlı İşlevlerin Avantajları ve Dezavantajları
- Yönetilen Kodda SQL Server 2005 Nesneleri Oluşturma
- Nasıl yapılır: CLR SQL Server Saklı Yordamı Oluşturma ve Çalıştırma
- Nasıl yapılır: CLR SQL Server Kullanıcı Tanımlı İşlevi Oluşturma ve Çalıştırma
- Nasıl yapılır: SQL Nesnelerini Çalıştırmak için Betiği Düzenleme
Test.sql
- Kullanıcı Tanımlı İşlevlere Giriş
- Yönetilen Kod ve SQL Server 2005 (Video)
- Transact-SQL Başvurusu
- İzlenecek yol: Yönetilen Kodda Saklı Yordam Oluşturma
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ışır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Adresine adresinden veya adresinden ulaşabileceğiniz blogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.http://ScottOnWriting.NET
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçireni S ren Jacob Lauritsen oldu. S ren, bu makaleyi gözden geçirmeye ek olarak, yönetilen veritabanı nesnelerini el ile derlemek için bu makalenin indirmesinde yer alan Visual C# Express Edition projesini de oluşturmuştur. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresine mitchell@4GuysFromRolla.combir satır bırakın.