Yönetilen Kod ile Saklı Yordamlar ve Kullanıcı Tanımlı İşlevler Oluşturma (C#)
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'un 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 ve yeniden kullanılabilir bir birim olarak yürütülebilen 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ı bir şekilde 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, karşılık gelen tablodaki tüm kayıtlara doğal olarak 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'e kadar 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 için 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, C# sınıfında yöntem olarak bir saklı yordam veya UDF oluşturabilirsiniz. Bu, bu saklı yordamların ve UDF'lerin .NET Framework ve kendi özel sınıflarınızdan işlevselliği kullanmasına olanak tanır.
Bu öğreticide yönetilen saklı yordamların ve User-Defined İşlevlerinin nasıl oluşturulacağını ve bunların Northwind veritabanımızla nasıl tümleştirileceğini 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 kullanabilme özelliği temel avantajlardır. Ancak yönetilen veritabanı nesneleri, çok fazla yordam mantığı içermeyen veri kümeleriyle çalışırken daha az verimli olabilir. Yönetilen kodu ve T-SQL'i kullanmanın 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 kadarki 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ımı gerekmedığından, veritabanını basitleştirilmiş dağıtıma yerleştirme ve bu öğreticileri çalıştırma.
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ştirebilirken, veritabanını SQL Server 2005 Express Sürüm veritabanı örneğine açıkça kaydederek bu adımların birkaçı ç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 kapatın ve ve NORTHWND_log.LDF
dosyalarını web sitesinin klasöründen web sitesinin App_Data
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 yapılabilir. Bilgisayarınızda Express dışı bir SQL Server 2005 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 indirip yüklemek için biraz zaman 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 yazın, 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 veritabanı örnekleri, güvenlik bilgileri, yönetim seçenekleri gibi SQL Server 2005 Express Sürüm veritabanı örneğiyle ilgili bilgiler listelenir.
Klasöründeki DataFiles
(veya taşıdığınız 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. Veritabanı Ekle iletişim kutusu kapatılır ve Nesne Gezgini artık yeni eklenen veritabanını listelemelidir. Northwind veritabanının gibi 9FE54661B32FDD967F51D71D0D5145CC_LINE ARTICLES\DATATUTORIALS\VOLUME 3\CSHARP\73\ASPNET_DATA_TUTORIAL_75_CS\APP_DATA\NORTHWND.MDF
bir ada sahip olma olasılığı vardır. 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 Oluşturma ve Proje SQL Server
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 C# kodu olarak yazacağız. Kod yazıldıktan sonra bu sınıfı bir derlemeye (bir .dll
dosyaya) 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, C# derleyicisini ()csc.exe
kullanarak komut satırından derleyebilir, komutunu kullanarak CREATE ASSEMBLY
veya Management Studio'dan veritabanına kaydedebilir ve saklı yordamı veya UDF nesnesini benzer yollarla 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 Proje türünü kullanma adımlarını inceleyeceğiz.
Not
Visual Web Developer veya Visual Studio'nun 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ştirmeye yönelik 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. ve 12. adımları okumanızı öneririz.
Visual Studio'yu açarak başlayın. Dosya menüsünden 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ğda listelenen Şablonlar'dan yeni bir proje SQL Server oluşturmayı seçin. Bu projeyi ManagedDatabaseConstructs
adlandırmayı seçtim ve adlı Tutorial75
bir Çözüme yerleştirdim.
Şekil 4: Yeni SQL Server Projesi Oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Çözümü oluşturmak ve Projeyi SQL Server 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. SQL Server Projesini 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 eklendi. Projede oluşturulan yönetilen veritabanı nesnelerinde hata ayıklamak için kullanılan adlı Test.sql
dosyaya sahip bir klasör Test Scripts
içerir. 12. Adımda hata ayıklamayı inceleyeceğiz.
Artık bu projeye yeni yönetilen saklı yordamlar ve UDF'ler ekleyebiliriz, ancak eklemeden önce mevcut web uygulamamızı Çözüme ekleyelim. Dosya menüsünden 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, çözüm iki proje içerecek şekilde güncelleştirilir: 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
başvurur App_Data
. 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 değeri buna karşılık olarak güncelleştirmemiz NORTHWNDConnectionString
gerekir. Web.config
Web sitesinde dosyasını açın ve değerini değiştirerek NORTHWNDConnectionString
bağlantı dizesi okumasını sağlayın: 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 devre dışı bırakır ( Pooling=false
). yönetilen saklı yordamlarda ve UDF'lerde hata ayıklamayı ASP.NET web sitesinden planlamazsanız, bağlantı havuzunu etkinleştirin.
3. Adım: Yönetilen Saklı Yordam Oluşturma
Northwind veritabanına yönetilen saklı yordam eklemek için öncelikle saklı yordamı SQL Server Projesi'nde bir yöntem olarak oluşturmamız gerekir. Çözüm Gezgini proje adına sağ tıklayın ManagedDatabaseConstructs
ve yeni öğ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, bunlara saklı yordamlar ve User-Defined İşlevleri dahildir.
İlk olarak, kullanımdan kaldırılan tüm ürünleri döndüren bir saklı yordam ekleyelim. Yeni saklı yordam dosyasını olarak adlandırın GetDiscontinuedProducts.cs
.
Şekil 8: Adlı GetDiscontinuedProducts.cs
Yeni 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 C# sınıf dosyası oluşturur:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetDiscontinuedProducts()
{
// Put your code here
}
};
Saklı yordamın adlı StoredProcedures
bir sınıf dosyası içinde partial
bir static
yöntem olarak uygulandığını unutmayın. Ayrıca yöntemi, GetDiscontinuedProducts
yöntemini saklı yordam olarak işaretleyen ile SqlProcedure attribute
süslenmiştir.
Aşağıdaki kod bir SqlCommand
nesnesi oluşturur ve alanı CommandText
1'e eşit olan ürünler için tablodaki Products
tüm sütunları döndüren Discontinued
bir SELECT
sorguya ayarlar. Ardından komutu yürütür ve sonuçları istemci uygulamasına geri gönderir. Bu kodu yöntemine GetDiscontinuedProducts
ekleyin.
// Create the command
SqlCommand myCommand = 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ığıyla Pipe
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 da anlaşılacağı gibi, yöntemi geçirilen SqlCommand
bir nesneyi yürütür ve sonuçları istemci uygulamasına geri gönderir.ExecuteAndSend
Not
Yönetilen veritabanı nesneleri, küme tabanlı mantık yerine yordam mantığı kullanan saklı yordamlar ve UDF'ler için en uygundur. Yordamsal mantık, veri kümeleriyle satır satır çalışmayı veya skaler verilerle çalışmayı içerir. GetDiscontinuedProducts
Ancak yeni oluşturduğumuz yöntemde yordam mantığı yoktur. 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. bir SQL Server Projesinin 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 olur: '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, derleme northwind veritabanına kaydedilmeye çalışıldığında 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ı varsayılan uyumluluk düzeyi 80'e sahiptir. 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 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 Projesini yeniden dağıtın. Bu kez dağıtım hatasız tamamlanmalıdır.
SQL Server Management Studio 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şturulmuştur ve derlemedeki yöntemine GetDiscontinuedProducts
ManagedDatabaseConstructs
işaret etmektedir. 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 var: veritabanı yönetilen kodun yürütülmesini engelleyecek şekilde yapılandırıldı. 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 kullanıcı kodunun yürütülmesi devre dışı bırakıldı. 'clr etkin 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 RECONFIGURE
etkilenmesi için çalıştırma değerini geçerli yapılandırma değerine ayarlayacak komutu yürütmemiz 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 özellikli ayarın yapılandırması 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 penceresinde komutunu exec
GetDiscontinuedProducts
girin ve yürütür. 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 ç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 Tüm Sonlandırılan Ü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, Türü Belirlenmiş DataSet'in TableAdapters öğreticisi için Yeni Saklı Yordamlar Oluşturma öğreticisinde adlı GetProductsByCategoryID
@CategoryID
bir giriş parametresi 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 bu parametreleri yöntem tanımında 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ş parametresi 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.cs
olarak adlandırın. 3. Adımda gördüğümüz gibi, bu, sınıfına partial
yerleştirilen adlı GetProductsWithPriceLessThan
bir yöntemle yeni bir C# sınıf StoredProcedures
dosyası oluşturur.
yönteminin GetProductsWithPriceLessThan
tanımını, adlı price
bir SqlMoney
giriş parametresi kabul edilecek şekilde güncelleştirin ve sorgu sonuçlarını yürütecek ve döndürecek kodu yazın:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetProductsWithPriceLessThan(SqlMoney price)
{
// Create the command
SqlCommand myCommand = 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);
}
Yönteminin 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 parametre eklenmesi ve değişkenin değerine atanmadırprice
.
Bu kodu ekledikten sonra SQL Server Projesini yeniden dağıtın. Ardından SQL Server Management Studio 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österdiğ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ını ManagedDatabaseConstructs
ekledik GetDiscontinuedProducts
ve bunları Northwind SQL Server veritabanına kaydettik. Ayrıca bu yönetilen saklı yordamları SQL Server Management Studio'den de ç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 TableAdapters öğreticisi için Yeni Saklı Yordamlar Oluşturma öğreticisinde oluşturulan Türü Belirlenmiş DataSet'e iki yeni yöntem ProductsTableAdapter
NorthwindWithSprocs
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ım Aracı TableAdapter adına sağ tıklayın ve bağlam menüsünde 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 ilgili bağlantı dizesi bu değişikliği yansıtacak şekilde güncelleştirilmiş olması şarttır. 2. Adımda içindeki Web.config
değerin güncelleştirilmesi NORTHWNDConnectionString
ele alınmıştı. 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
bağlantısı NORTHWNDConnectionString
bulunamıyor. Bu hatayı çözmek için Tamam'a Web.config
tıklayın ve 2. Adımda açıklandığı gibi değerine gidin ve 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
, Var olan saklı yordamı kullan seçeneğini belirleyin ve İleri'ye basın.
Şekil 15: Var olan 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ı belirtmemize olanak tanır. 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 adlı FillByPriceLessThan
yöntemleri GetProductsWithPriceLessThan
ProductsTableAdapter
oluşturmak için GetProductsWithPriceLessThan
bu adımları yineleyin.
Şekil 19'da ve GetProductsWithPriceLessThan
yönetilen saklı yordamlar ProductsTableAdapter
için GetDiscontinuedProducts
yöntemleri ekledikten sonra DataSet Tasarım Aracı 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 karşılık gelen 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 NorthwindWithSprocs.ProductsDataTable GetDiscontinuedProducts()
{
return Adapter.GetDiscontinuedProducts();
}
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable
GetProductsWithPriceLessThan(decimal priceLessThan)
{
return Adapter.GetProductsWithPriceLessThan(priceLessThan);
}
Her iki yöntem de tek yapmanız gereken karşılık gelen DAL yöntemini çağırmak ve örneği döndürmektir 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
ve yönetilen saklı yordamları çağırma GetDiscontinuedProducts
desteği içerecek şekilde genişletilmiş İş Mantığı ve GetProductsWithPriceLessThan
Veri Erişim Katmanları ile artık bu saklı yordam sonuçlarını bir ASP.NET sayfası aracılığıyla görüntüleyebiliriz.
Klasördeki AdvancedDAL
sayfayı ManagedFunctionsAndSprocs.aspx
açın ve Araç Kutusu'ndan bir GridView'ı Tasarım Aracı 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'ı, sınıfın ProductsBLLWithSprocs
GetDiscontinuedProducts
yönteminden verilerini ç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 GetDiscontinuedProducts
Drop-Down Listesinden Yöntemi seçin (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
biraz zaman 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 ProductsDataTable
sınıfının GetDiscontinuedProducts
yöntemini çağırır GetDiscontinuedProducts
. 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 ve bu sonuçlar GridView'a bağlanıp görüntülendiği Sunu Katmanına döndürülü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 uygulama için, sayfaya bir TextBox ve başka bir GridView ekleyin. Bu GridView'un GetProductsWithPriceLessThan
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
User-Defined İşlevleri veya UDF'ler, programlama dillerindeki işlevlerin semantiğini yakından taklit eden veritabanı nesneleridir. C# dilindeki 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 verileri (dize, tamsayı vb.) veya tablosal verileri döndürebilir. Skaler veri türü döndüren bir UDF'den 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ü, ardından İşlevler'i ve ardından Skaler değerli İşlevler'i genişleterek bulunabilir. Sorguda SELECT
şu şekilde 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. Oluşturulduktan sonra, bu UDF'ye sorgunun FROM
SELECT
(veya JOIN
) yan tümcesinde 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. User-Defined İşlevlerine Giriş. Ayrıca User-Defined İşlevlerinin 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'ler 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 UDF'yi udf_ComputeInventoryValue
yönetilen kodda uygulayalım.
Projeye yönetilen bir 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 User-Defined Şablonunu seçin ve yeni UDF dosyasını udf_ComputeInventoryValue_Managed.cs
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)
User-Defined İşlevi ş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 bir UDF olarak işaretleyen özniteliği kullanılarak SqlFunction
dekore edilmiştir.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString udf_ComputeInventoryValue_Managed()
{
// Put your code here
return new SqlString("Hello");
}
};
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ş parametresi kabul edip bir SqlMoney
nesne döndürecek şekilde güncelleştirmemiz gerekir. Envanter değerini hesaplama mantığı, T-SQL udf_ComputeInventoryValue
UDF'dekiyle aynıdır.
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlMoney udf_ComputeInventoryValue_Managed
(SqlMoney UnitPrice, SqlInt16 UnitsInStock, SqlBoolean Discontinued)
{
SqlMoney inventoryValue = 0;
if (!UnitPrice.IsNull && !UnitsInStock.IsNull)
{
inventoryValue = UnitPrice * UnitsInStock;
if (Discontinued == true)
inventoryValue = inventoryValue * new SqlMoney(0.5);
}
return inventoryValue;
}
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ündemoney
, türündeki UnitsInStock
sütun ve türündeki smallint
Discontinued
bit
sütundur.
Kod, 0 değerine atanmış adlı inventoryValue
bir SqlMoney
örnek oluşturarak 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 s IsNull
özelliği aracılığıyla SqlMoney
yaparız. Hem hem de UnitPrice
UnitsInStock
değeri olmayanNULL
değerler içeriyorsa, değerini ikisinin ürünü olarak hesaplarız inventoryValue
. 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
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, bir 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 dönün ve Skaler 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 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ıklayarak değiştirilebilir.
Şekil 26: Veritabanının SQL/CLR Hata Ayıklamasına İzin Verdiğinden Emin Olun
Yönetilen saklı yordamın hatalarını 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 Projesinden hata ayıklama yapmak için Visual Studio'ya hata ayıklamaya başladığımızda SQL Server Projesi'ni başlatmasını ManagedDatabaseConstructs
emretmeliyiz. Çö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öründe bulunan Test Scripts
dosyasındaKI SQL deyimlerini Test.sql
yürütür. Örneğin, yönetilen saklı yordamı test GetProductsWithPriceLessThan
etmek için mevcut Test.sql
dosya içeriğini 14,95 değerini geçiren @CategoryID
yönetilen saklı yordamı çağıran GetProductsWithPriceLessThan
aşağıdaki deyimle değiştirin:
exec GetProductsWithPriceLessThan 14.95
yukarıdaki betiği içine Test.sql
girdikten sonra Hata Ayıklama menüsüne gidip Hata Ayıklamayı Başlat'ı seçerek veya Araç Çubuğu'ndaki F5'e veya yeşil oynatma 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 ardından betiği yürütür Test.sql
. Bu noktada kesme noktasına ulaşılır ve yönteminde GetProductsWithPriceLessThan
adım adım ilerleyebilir, giriş parametrelerinin değerlerini inceleyebilir ve bu şekilde devam edebiliriz.
Şekil 28: Yöntemdeki GetProductsWithPriceLessThan
Kesme Noktasına İsabet Edildi (Tam boyutlu görüntüyü görüntülemek için tıklayın)
BIR SQL veritabanı nesnesinin bir istemci uygulaması aracılığıyla hata ayıklanması için, veritabanının uygulama hata ayıklamasını destekleyecek şekilde yapılandırılması zorunludur. 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 açıklandı.
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 durdurulacak ve denetim hata ayıklayıcıya devredilecek 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 Edition 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 içinde derlemede uygun yöntemi işaret eden bir veritabanı nesnesi oluşturun.
Bu görevleri göstermek için, belirtilen değerden daha büyük olan ürünleri döndüren UnitPrice
yeni bir yönetilen saklı yordam oluşturalım. Bilgisayarınızda adlı GetProductsWithPriceGreaterThan.cs
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):
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetProductsWithPriceGreaterThan(SqlMoney price)
{
// Create the command
SqlCommand myCommand = 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);
}
};
Bu kod, 5. Adımda oluşturulan yöntemle GetProductsWithPriceLessThan
neredeyse aynıdır. Tek farklar yöntem adları, WHERE
yan tümcesi ve sorguda kullanılan parametre adıdır. yöntemine GetProductsWithPriceLessThan
geri 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.cs
dizine gidin ve C# derleyicisini (csc.exe
) kullanarak sınıf dosyasını bir derlemeye derleyin:
csc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.cs
içinde bulunan csc.exe
klasör sistemin 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\csc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.cs
Şekil 29: Derlemeye Derleme GetProductsWithPriceGreaterThan.cs
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
bayrağı, /t
C# 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.cs
derlemek yerine alternatif olarak Visual C# Express Edition'ı kullanabilir veya Visual Studio Standard Edition'da 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 C# 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 Assemblies'dir. 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: ManuallyCreatedDBObjects.dll
Nesne Gezgini
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 yürütebilirsiniz:
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 (derlemede ManuallyCreatedDBObjects
olan 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 çalıştırın:
exec GetProductsWithPriceGreaterThan 24.95
Şekil 32'de gösterildiği gibi, yukarıdaki komut 24,95 ABD dolarından büyük olan ürünlerin UnitPrice
bilgilerini 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 Common Language Runtime (CLR) ile tümleştirme sağlar. Daha önce, bu veritabanı nesneleri yalnızca T-SQL kullanılarak oluşturulabilirdi, ancak şimdi bu nesneleri C# gibi .NET programlama dillerini kullanarak oluşturabiliriz. Bu öğreticide iki yönetilen saklı yordam ve yönetilen bir User-Defined İşlevi oluşturduk.
Visual Studio'nun SQL Server Proje türü, yönetilen veritabanı nesnelerini oluşturmayı, derlemeyi ve dağıtmayı kolaylaştırır. Ayrıca zengin hata ayıklama desteği sunar. Ancak SQL Server Proje türleri yalnızca Visual Studio'nun Professional ve Team Systems sürümlerinde kullanılabilir. Visual Web Developer veya Visual Studio Standard Edition 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:
- User-Defined İşlevlerinin Avantajları ve Dezavantajları
- Yönetilen Kodda SQL Server 2005 Nesneleri Oluşturma
- Nasıl yapılır: Saklı Yordam SQL Server CLR Oluşturma ve Çalıştırma
- Nasıl yapılır: CLR SQL Server User-Defined İş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ışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Saat içinde 2.0. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.
Ö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çirmenin yanı sıra, 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 bir satır mitchell@4GuysFromRolla.combırakın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin