Aracılığıyla paylaş


Yönetilen Kod ile Saklı Yordamlar ve Kullanıcı Tanımlı İşlevler Oluşturma (VB)

tarafından Scott Mitchell

PDF'i indirin

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, UPDATEve 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. , CHARINDEXve PATINDEX gibi LEFTdize işleme işlevleri skaler verilerle çalışır. SQL ayrıca ve WHILEgibi 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ı DataFilesbir 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.

SQL Server Management Studio'nun Sunucuya Bağlan penceresini gösteren ekran görüntüsü.

Ş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.

Veritabanı MDF dosyasına ekleme işlemini gösteren Veritabanı Ekle penceresinin ekran görüntüsü.

Ş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.MDFolabilir. Veritabanına sağ tıklayıp Yeniden Adlandır'ı seçerek veritabanını Northwind olarak yeniden adlandırın.

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ı Tutorial75bir Çözüme yerleştirdim.

Yeni SQL Server Projesi Oluşturma

Ş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.

SQL Server Projesini Northwind Veritabanı ile ilişkilendirme

Ş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.

SQL/CLR Hata Ayıklamasını Etkinleştirme

Ş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.sqliç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.

Çözüm Gezgini şimdi iki proje içeriyor

Ş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.

GetDiscontinuedProducts.vb Adlı Yeni Bir Saklı Yordam Ekleme

Ş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ı StoredProceduresbir 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 SqlContextaracı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_dbcmptleveliç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.

Northwind Veritabanı Uyumluluk Düzeyini Güncelleştirme

Ş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.

ManagedDatabaseConstructs Derlemesi Artık Northwind Veritabanı ile Kaydedildi

Şekil 10: Derleme ManagedDatabaseConstructs Artık Northwind Veritabanı ile Kayıtlı

Saklı Yordamlar klasörünü de genişletin. Burada adlı GetDiscontinuedProductsbir 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).

GetDiscontinuedProducts Saklı Yordamı Saklı Yordamlar Klasöründe Listelenir

Ş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.

Clr özellikli Ayar Şu Anda 0 Olarak Ayarlanmış

Ş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 GetDiscontinuedProductsgirin 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.

GetDiscontinuedProducts Saklı Yordamı, Sonlandırılan Tüm Ürünleri Döndürür

Ş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 @CategoryIDbir 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 GetProductsWithPriceLessThanbaş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 StoredProceduresdosyası 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.

25 ABD Dolarının Altındaki Ürünler Görüntüleniyor

Ş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.configdeğ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.

Mevcut saklı yordamı kullan Seçeneğini belirleyin

Ş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.

GetDiscontinuedProducts Yönetilen Saklı Yordamını seçin

Ş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.

Tablosal Veri Seçeneğini Belirleyin

Ş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 GetDiscontinuedProductsadlandırın. Sihirbazı tamamlamak için Son’a tıklayın.

FillByDiscontinued ve GetDiscontinuedProducts Yöntemlerini Adlandırı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.

ProductsTableAdapter Bu Adımda Eklenen Yeni Yöntemleri Içerir

Ş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ı DiscontinuedProductsDataSourceyeni bir ObjectDataSource'a bağlayın. ObjectDataSource'un verilerini sınıf GetDiscontinuedProducts yönteminden ProductsBLLWithSprocs çekecek şekilde yapılandırın.

ObjectDataSource'ı ProductsBLLWithSprocs Sınıfını Kullanacak Şekilde Yapılandırma

Ş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)

SELECT sekmesindeki Açılan Listeden GetDiscontinuedProducts Yöntemini seçin

Ş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ı ProductsDataTableiçin otomatik olarak bir BoundField veya CheckBoxField ekler. ve Discontinueddışı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.

Sonlandı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 , UnitsInStockve Discontinued değerleri olmak üzere UnitPriceüç giriş parametresini alarak yapar ve türünde moneybir değer döndürür. ile çarparak UnitPrice UnitsInStockenvanterin 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.

Her Ürünün Stok Değerleri Listelenir

Ş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 ProductIDher biri için , ProductNameve 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.

Her İçecek için ProductID, ProductName ve CategoryID listelenir

Şekil 24: ProductID, ProductNameve 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.vbadlandırın.

ManagedDatabaseConstructs Projesine Yeni Bir Yönetilen UDF Ekleme

Ş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_Managedbu ö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ı, , UnitsInStockve 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 UnitsInStockve 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 moneysütun ve türündeki smallintDiscontinued bitsü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 ve
  • dbo.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.

Veritabanının SQL/CLR Hata Ayıklamasına İzin Verdiğinden Emin Olun

Ş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.

GetProductsWithPriceLessThan Yönteminde Kesme Noktası Ayarlama

Ş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.sqlgirdikten 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.

GetProductsWithPriceLessThan Yöntemindeki Kesme Noktasına Ulaşıldı

Ş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:

  1. Yönetilen veritabanı nesnesinin kaynak kodunu içeren bir dosya oluşturun,
  2. nesnesini bir derlemede derleyin,
  3. Derlemeyi SQL Server 2005 veritabanına kaydedin ve
  4. 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 PATHiç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

GetProductsWithPriceGreaterThan.vb Derlemede Derleme

Ş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 ASSEMBLYkullanı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.

ManuallyCreatedDBObjects.dll Derlemesini Veritabanına Ekleme

Şekil 30: Derlemeyi ManuallyCreatedDBObjects.dll Veritabanına Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)

ManuallyCreatedDBObjects.dll derlemesinin vurgulandığı Nesne Gezgini penceresinin ekran görüntüsü.

Ş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 ManuallyCreatedDBObjectssı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.

Yürütülen GetProductsWithPriceGreaterThan saklı yordamını gösteren ve 24,95 TL'den büyük UnitPrice değerine sahip ürünleri görüntüleyen Microsoft SQL Server Management Studio penceresinin ekran görüntüsü.

Ş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:

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.