Aracılığıyla paylaş


Türü Belirtilmiş DataSet'in TableAdapter’ları için Mevcut Saklı Yordamları Kullanma (C#)

tarafından Scott Mitchell

PDF'i indirin

Önceki öğreticide, yeni saklı yordamlar oluşturmak için TableAdapter Sihirbazı'nı kullanmayı öğrendik. Bu öğreticide aynı TableAdapter Sihirbazı'nın mevcut saklı yordamlarla nasıl çalışabileceğini öğreneceksiniz. Ayrıca veritabanımıza el ile yeni saklı yordamlar eklemeyi de öğreniriz.

Giriş

Önceki öğreticide, Typed DataSet s TableAdapters'ın geçici SQL deyimleri yerine verilere erişmek için saklı yordamları kullanacak şekilde nasıl yapılandırıldığını gördük. Özellikle TableAdapter sihirbazının bu saklı yordamları otomatik olarak oluşturmasını nasıl sağlandığını inceledik. Eski bir uygulamayı ASP.NET 2.0'a aktarırken veya mevcut bir veri modelinin etrafında bir ASP.NET 2.0 web sitesi oluştururken, veritabanı ihtiyacımız olan saklı yordamları zaten içeriyor olabilir. Alternatif olarak, saklı yordamlarınızı el ile veya saklı yordamlarınızı otomatik olarak oluşturan TableAdapter sihirbazı dışındaki bir araç aracılığıyla oluşturmayı tercih edebilirsiniz.

Bu öğreticide TableAdapter'ın mevcut saklı yordamları kullanacak şekilde nasıl yapılandırılacağına bakacağız. Northwind veritabanında yalnızca küçük bir yerleşik saklı yordam kümesi olduğundan, Visual Studio ortamı aracılığıyla veritabanına el ile yeni saklı yordamlar eklemek için gereken adımları da inceleyeceğiz. Haydi başlayalım!

Not

İşlem içindeki Veritabanı Değişikliklerini Sarmalama öğreticisinde, işlemleri (BeginTransaction, CommitTransactionvb.) desteklemek için TableAdapter'a yöntemler ekledik. Alternatif olarak, işlemler tamamen veri erişim katmanı kodunda değişiklik gerektirmeyen bir saklı yordam içinde yönetilebilir. Bu öğreticide, işlem kapsamında saklı yordam deyimlerini yürütmek için kullanılan T-SQL komutlarını inceleyeceğiz.

1. Adım: Northwind Veritabanına Saklı Yordamlar Ekleme

Visual Studio, veritabanına yeni saklı yordamlar eklemeyi kolaylaştırır. Northwind veritabanına, belirli CategoryID bir değere sahip olanlar için tablodan Products tüm sütunları döndüren yeni bir saklı yordam ekleyelim. Sunucu Gezgini penceresinden Northwind veritabanını genişleterek klasörlerinin (Veritabanı Diyagramları, Tablolar, Görünümler vb.) görüntülenmesini sağlayın. Önceki öğreticide gördüğümüz gibi Saklı Yordamlar klasörü veritabanının mevcut saklı yordamlarını içerir. Yeni bir saklı yordam eklemek için Saklı Yordamlar klasörüne sağ tıklayıp bağlam menüsünden Yeni Saklı Yordam Ekle seçeneğini belirlemeniz yeterlidir.

Saklı Yordamlar Klasörüne Sağ Tıklayın ve Yeni Saklı Yordam Ekle

Şekil 1: Saklı Yordamlar Klasörüne Sağ Tıklayın ve Yeni Saklı Yordam Ekle'ye tıklayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Şekil 1'de gösterildiği gibi, Yeni Saklı Yordam Ekle seçeneğinin seçilmesi, Visual Studio'da saklı yordamı oluşturmak için gereken SQL betiğinin ana hattını içeren bir betik penceresi açar. Bu betiğin detayını çıkarmak ve yürütmek bizim işimizdir; bu noktada saklı yordam veritabanına eklenir.

Aşağıdaki betiği girin:

CREATE PROCEDURE dbo.Products_SelectByCategoryID 
(
    @CategoryID int
)
AS
SELECT ProductID, ProductName, SupplierID, CategoryID, 
       QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, 
       ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID

Bu betik yürütülürken, Adlı Northwind veritabanına Products_SelectByCategoryIDyeni bir saklı yordam ekler. Bu saklı yordam tek bir giriş parametresini (@CategoryIDtürü int) kabul eder ve eşleşen CategoryID değere sahip ürünler için tüm alanları döndürür.

Bu CREATE PROCEDURE betiği yürütmek ve saklı yordamı veritabanına eklemek için araç çubuğundaki Kaydet simgesine tıklayın veya Ctrl+S tuşlarına basın. Bunu yaptıktan sonra Saklı Yordamlar klasörü yenilenir ve yeni oluşturulan saklı yordamı gösterir. Ayrıca, penceredeki betik, olan incelik CREATE PROCEDURE dbo.Products_SelectProductByCategoryID olarak ALTER PROCEDURE dbo.Products_SelectProductByCategoryIDdeğişir. CREATE PROCEDURE veritabanına yeni bir saklı yordam eklerken ALTER PROCEDURE mevcut bir yordamı güncelleştirir. Betiğin başlangıcı olarak değiştiğinden ALTER PROCEDUREsaklı yordam giriş parametrelerini veya SQL deyimlerini değiştirip Kaydet simgesine tıklandığında saklı yordam bu değişikliklerle güncelleştirilir.

Şekil 2'de saklı yordam kaydedildikten sonra Products_SelectByCategoryID Visual Studio gösterilmektedir.

Saklı Yordam Products_SelectByCategoryID Veritabanına Eklendi

Şekil 2: Saklı Yordam Products_SelectByCategoryID Veritabanına Eklendi (Tam boyutlu görüntüyü görüntülemek için tıklayın)

2. Adım: TableAdapter'ı Mevcut Saklı Yordamı Kullanacak Şekilde Yapılandırma

Products_SelectByCategoryID Artık saklı yordam veritabanına eklendiğine göre, veri erişim katmanımızı yöntemlerinden biri çağrıldığında bu saklı yordamı kullanacak şekilde yapılandırabiliriz. Özellikle, Yeni oluşturduğumuz saklı yordamı çağıran Products_SelectByCategoryID Türemiş DataSet içinde NorthwindWithSprocs öğesine bir GetProductsByCategoryID(categoryID) yöntem ProductsTableAdapter ekleyeceğiz.

DataSet'i NorthwindWithSprocs açarak başlayın. TabloAdapter Sorgu Yapılandırması sihirbazını ProductsTableAdapter başlatmak için öğesine sağ tıklayın ve Sorgu Ekle'yi seçin. Önceki öğreticide TableAdapter'ın bizim için yeni bir saklı yordam oluşturmasını tercih ettik. Ancak bu öğretici için yeni TableAdapter yöntemini mevcut Products_SelectByCategoryID saklı yordama göndermek istiyoruz. Bu nedenle, sihirbazın ilk adımında Varolan saklı yordamı kullan seçeneğini belirleyin ve İleri'ye tıklayın.

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

Şekil 3: Var olan saklı yordamı kullan Seçeneğini belirleyin (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Aşağıdaki ekran, veritabanının saklı yordamlarıyla doldurulmuş bir açılan liste sağlar. Saklı yordam seçildiğinde, giriş parametreleri solda ve veri alanları (varsa) sağda listelenir. Listeden Products_SelectByCategoryID saklı yordamı seçin ve İleri'ye tıklayın.

saklı yordamı Products_SelectByCategoryID seçin

Şekil 4: Saklı Yordamı Seçin Products_SelectByCategoryID (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Sonraki ekranda saklı yordam tarafından ne tür verilerin döndürüleceği sorulur ve buradaki yanıtımız TableAdapter yöntemi tarafından döndürülen türü belirler. Örneğin, tablosal verilerin döndürüldüğünü belirtirsek, yöntemi saklı yordam tarafından döndürülen kayıtlarla doldurulmuş bir ProductsDataTable örnek döndürür. Buna karşılık, bu saklı yordamın tek bir değer döndürdüğünü belirtirsek TableAdapter saklı yordam tarafından döndürülen ilk kaydın ilk sütunundaki değere atanmış bir object değer döndürür.

Products_SelectByCategoryID Saklı yordam belirli bir kategoriye ait tüm ürünleri döndürdüğünden, ilk yanıtı (Tablosal veriler) seçin ve İleri'ye tıklayın.

Saklı Yordamın Tablo verileri döndürdüğünü belirtin

Şekil 5: Saklı Yordamın Tablo verileri döndürdüğünü belirtin (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Geriye kalan tek şey, hangi yöntem desenlerinin kullanılacağını ve ardından bu yöntemlerin adlarının gösterilmesidir. Hem DataTable Doldur hem de DataTable Döndür seçeneklerini işaretli bırakın, ancak yöntemleri ve GetProductsByCategoryIDolarak FillByCategoryID yeniden adlandırın. Ardından, sihirbazın gerçekleştireceği görevlerin özetini gözden geçirmek için İleri'ye tıklayın. Her şey doğru görünüyorsa Son'a tıklayın.

FillByCategoryID ve GetProductsByCategoryID Yöntemlerini Adlandırın

Şekil 6: Yöntemleri FillByCategoryID adlandırın ve GetProductsByCategoryID (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

Yeni oluşturduğumuz FillByCategoryID TableAdapter yöntemleri ve GetProductsByCategoryIDtüründe intbir giriş parametresi bekler. Bu giriş parametresi değeri parametresi aracılığıyla @CategoryID saklı yordama geçirilir. Saklı yordamın Products_SelectByCategory parametrelerini değiştirirseniz, bu TableAdapter yöntemlerinin parametrelerini de güncelleştirmeniz gerekir. Önceki öğreticide açıklandığı gibi, bu iki yoldan biriyle yapılabilir: parametre koleksiyonundan parametreleri el ile ekleyerek veya kaldırarak ya da TableAdapter sihirbazını yeniden çalıştırarak.

3. Adım: BLL'ye Yöntem EklemeGetProductsByCategoryID(categoryID)

GetProductsByCategoryID DAL yöntemi tamamlandığında, sonraki adım İş Mantığı Katmanı'nda bu yönteme erişim sağlamaktır. ProductsBLLWithSprocs Sınıf dosyasını açın ve aşağıdaki yöntemi ekleyin:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetProductByCategoryID(int categoryID)
{
    return Adapter.GetProductsByCategoryID(categoryID);
}

Bu BLL yöntemi yalnızca s GetProductsByCategoryID yönteminden döndürüleni ProductsTableAdapter döndürürProductsDataTable. özniteliği, DataObjectMethodAttribute ObjectDataSource'un Veri Kaynağını Yapılandırma sihirbazı tarafından kullanılan meta verileri sağlar. Özellikle, bu yöntem SELECT sekmesinin açılan listesinde görünür.

4. Adım: Ürünleri Kategoriye Göre Görüntüleme

Yeni eklenen Products_SelectByCategoryID saklı yordamı ve buna karşılık gelen DAL ve BLL yöntemlerini test etmek için DropDownList ve GridView içeren bir ASP.NET sayfası oluşturalım. DropDownList veritabanındaki tüm kategorileri listelerken GridView seçili kategoriye ait ürünleri görüntüler.

Not

Önceki öğreticilerde DropDownLists kullanarak ana/ayrıntı arabirimleri oluşturduk. Böyle bir ana/ayrıntı raporu uygulamaya daha ayrıntılı bir bakış için DropDownList ile Ana/Ayrıntı Filtreleme öğreticisine bakın.

Klasördeki sayfayı ExistingSprocs.aspx açın ve Araç Kutusu'ndan AdvancedDAL Tasarımcı'ya bir DropDownList sürükleyin. DropDownList s ID özelliğini olarak Categories ve AutoPostBack özelliğini olarak trueayarlayın. Ardından, akıllı etiketinden DropDownList öğesini adlı CategoriesDataSourceyeni bir ObjectDataSource'a bağlayın. ObjectDataSource'un verilerini sınıfın CategoriesBLL GetCategories yönteminden alması için yapılandırın. UPDATE, INSERT ve DELETE sekmelerindeki açılan listeleri (Yok) olarak ayarlayın.

CategoriesBLL Sınıfının GetCategories Yönteminden Veri Alma

Şekil 7: Sınıf GetCategories Yönteminden CategoriesBLL Veri Alma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

UPDATE, INSERT ve DELETE Sekmelerindeki Açılan Listeleri (Yok) olarak ayarlayın

Şekil 8: UPDATE, INSERT ve DELETE Sekmelerindeki Açılan Listeleri (Yok) olarak ayarlayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

ObjectDataSource sihirbazını tamamladıktan sonra DropDownList'i veri alanını görüntüleyecek CategoryName ve alanını her ListItemiçin olarak Value kullanacak CategoryID şekilde yapılandırın.

Bu noktada DropDownList ve ObjectDataSource bildirim temelli işaretlemeleri aşağıdakine benzer olmalıdır:

<asp:DropDownList ID="Categories" runat="server" AutoPostBack="True" 
    DataSourceID="CategoriesDataSource" DataTextField="CategoryName" 
    DataValueField="CategoryID">
</asp:DropDownList>
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>

Ardından, bir GridView'ı Tasarımcı'ya sürükleyerek DropDownList öğesinin altına yerleştirin. GridView'ları ID ProductsByCategory olarak ayarlayın ve, akıllı etiketinden bunu adlı ProductsByCategoryDataSourceyeni bir ObjectDataSource'a bağlayın. ProductsByCategoryDataSource Yöntemini kullanarak verilerini almasını sağlayarak ObjectDataSource'ı sınıfını kullanacak ProductsBLLWithSprocs şekilde GetProductsByCategoryID(categoryID) yapılandırın. Bu GridView yalnızca verileri görüntülemek için kullanılacağından, UPDATE, INSERT ve DELETE sekmelerindeki açılan listeleri (Yok) olarak ayarlayın ve İleri'ye tıklayın.

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

Şekil 9: 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)

GetProductsByCategoryID(categoryID) Yönteminden Veri Alma

Şekil 10: Yöntemden GetProductsByCategoryID(categoryID) Veri Alma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

SELECT sekmesinde seçilen yöntem bir parametre bekler, bu nedenle sihirbazın son adımı parametrenin kaynağını ister. Parametre kaynağı açılan listesini Denetim olarak ayarlayın ve ControlID açılan listesinden denetimi seçin Categories . Sihirbazı tamamlamak için Son’a tıklayın.

CategoryID Parametresinin Kaynağı Olarak Kategoriler DropDownList Değerini Kullanın

Şekil 11: DropDownList değerini Parametrenin categoryID Kaynağı olarak kullanma Categories (Tam boyutlu görüntüyü görüntülemek için tıklayın)

ObjectDataSource sihirbazını tamamladıktan sonra Visual Studio, ürün veri alanlarının her biri için BoundFields ve bir CheckBoxField ekler. Bu alanları uygun gördüğünüz şekilde özelleştirebilirsiniz.

Tarayıcı üzerinden sayfayı ziyaret edin. Sayfayı ziyaret ederken İçecekler kategorisi ve kılavuzda listelenen ilgili ürünler seçilir. Şekil 12'de gösterildiği gibi açılan listenin alternatif bir kategoriye değiştirilmesi geri göndermeye neden olur ve kılavuzu yeni seçilen kategorinin ürünleriyle yeniden yükler.

Üretim Kategorisindeki Ürünler Görüntülenir

Şekil 12: Üretim Kategorisindeki Ürünler Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

5. Adım: Saklı Yordam Deyimlerini İşlem Kapsamında Sarmalama

İşlem içindeki Veritabanı Değişikliklerini Sarmalama öğreticisinde, bir işlem kapsamında bir dizi veritabanı değişiklik deyimi gerçekleştirme tekniklerini ele aldık. Bir işlemin çatısı altında gerçekleştirilen değişikliklerin tümünün başarılı veya başarısız olduğunu ve bölünmezliği garanti ettiğini hatırlayın. İşlemleri kullanma teknikleri şunlardır:

  • Ad alanında sınıfları kullanarak System.Transactions ,
  • Veri Erişim Katmanı'nın, ve gibi SqlTransactionADO.NET sınıflarını kullanmasını sağlama
  • T-SQL işlem komutlarını doğrudan saklı yordama ekleme

İşlem öğreticisindeki Sarmalama Veritabanı Değişiklikleri DAL'deki ADO.NET sınıflarını kullandı. Bu öğreticinin geri kalanında, saklı yordam içinden T-SQL komutlarını kullanarak bir işlemin nasıl yönetileceği incelendi.

Bir işlemi el ile başlatmak, işlemek ve geri döndürmek için kullanılan üç temel SQL komutu sırasıyla , COMMIT TRANSACTIONve ROLLBACK TRANSACTIONşeklindedirBEGIN TRANSACTION. ADO.NET yaklaşımında olduğu gibi, saklı yordam içindeki işlemleri kullanırken aşağıdaki deseni uygulamamız gerekir:

  1. İşlemin başlangıcını belirtin.
  2. İşlemi oluşturan SQL deyimlerini yürütür.
  3. 2. Adım'daki deyimlerden birinde hata varsa işlemi geri alın
  4. 2. Adımdaki tüm deyimler hatasız tamamlanırsa işlemi işleyin.

Bu desen, aşağıdaki şablon kullanılarak T-SQL söz diziminde uygulanabilir:

BEGIN TRY
  BEGIN TRANSACTION -- Start the transaction
  ... Perform the SQL statements that makeup the transaction ...
  -- If we reach here, success!
  COMMIT TRANSACTION
END TRY
BEGIN CATCH 
  -- Whoops, there was an error
  ROLLBACK TRANSACTION
  -- Raise an error with the 
  -- details of the exception   
  DECLARE @ErrMsg nvarchar(4000),
          @ErrSeverity int 
  SELECT @ErrMsg = ERROR_MESSAGE(), 
         @ErrSeverity = ERROR_SEVERITY() 
 
  RAISERROR(@ErrMsg, @ErrSeverity, 1) 
END CATCH

Şablon, SQL Server 2005'e yeni eklenen bir yapı olan bir blok tanımlayarak TRY...CATCH başlar. try...catch C# içindeki bloklarda olduğu gibi SQL TRY...CATCH bloğu da bloktaki TRY deyimleri yürütür. Herhangi bir deyim hata oluşturursa, denetim hemen bloğa CATCH aktarılır.

İşlemi oluşturan SQL deyimlerini yürütürken hata yoksa, COMMIT TRANSACTION deyimi değişiklikleri işler ve işlemi tamamlar. Bununla birlikte, deyimlerden biri hatayla sonuçlanırsa, ROLLBACK TRANSACTION CATCH içindeki bloğu veritabanını işlemin başlangıcından önceki durumuna döndürür. Saklı yordam ayrıca RAISERROR komutunu kullanarak da bir hata oluşturur ve bu da uygulamada bir'in SqlException yükseltilmesine neden olur.

Not

TRY...CATCH Blok SQL Server 2005'e yeni başladığından, Microsoft SQL Server'ın eski sürümlerini kullanıyorsanız yukarıdaki şablon çalışmaz.

Somut bir örneğe bakalım. ve Products tabloları arasında Categories bir yabancı anahtar kısıtlaması vardır; bu da tablodaki Products her CategoryID alanın tablodaki bir CategoryID değerle eşleşmesi Categories gerektiği anlamına gelir. İlişkili ürünler içeren bir kategoriyi silmeye çalışmak gibi bu kısıtlamayı ihlal edecek herhangi bir eylem, yabancı anahtar kısıtlaması ihlaline neden olur. Bunu doğrulamak için, İkili Verilerle Çalışma bölümünde (~/BinaryData/UpdatingAndDeleting.aspx) Varolan İkili Verileri Güncelleştirme ve Silme örneğini yeniden ziyaret edin. Bu sayfa sistemdeki her kategoriyi Düzenle ve Sil düğmeleriyle birlikte listeler (bkz. Şekil 13), ancak meşrubatlar gibi ilişkili ürünler içeren bir kategoriyi silmeye çalışırsanız, silme işlemi yabancı anahtar kısıtlaması ihlali nedeniyle başarısız olur (bkz. Şekil 14).

Her Kategori Düzenle ve Sil Düğmeleriyle GridView'da Görüntülenir

Şekil 13: Her Kategori Düzenle ve Sil Düğmeleriyle GridView'da Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Mevcut Ürünlere Sahip Bir Kategoriyi Silemezsiniz

Şekil 14: Mevcut Ürünleri Olan Bir Kategoriyi Silemezsiniz (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Ancak, kategorilerin ilişkili ürünler olup olmadığına bakılmaksızın silinmesine izin vermek istediğimizi düşünün. Ürünler içeren bir kategori silinirse, mevcut ürünlerini de silmek istediğimizi düşünün (ancak başka bir seçenek de ürün CategoryID değerlerini NULLolarak ayarlamak olabilir). Bu işlev, yabancı anahtar kısıtlamasının art arda kuralları aracılığıyla uygulanabilir. Alternatif olarak, giriş parametresini kabul eden ve çağrıldığında tüm ilişkili ürünleri ve ardından belirtilen kategoriyi açıkça silen bir @CategoryID saklı yordam oluşturabiliriz.

Böyle bir saklı yordama ilk denememiz aşağıdaki gibi görünebilir:

CREATE PROCEDURE dbo.Categories_Delete
(
    @CategoryID int
)
AS
-- First, delete the associated products...
DELETE FROM Products
WHERE CategoryID = @CategoryID
-- Now delete the category
DELETE FROM Categories
WHERE CategoryID = @CategoryID

Bu işlem ilişkili ürünleri ve kategoriyi kesinlikle silecek olsa da, bunu işlem kapsamında yapmaz. Belirli @CategoryID bir değerin silinmesini engelleyebilecek başka bir yabancı anahtar kısıtlaması Categories olduğunu düşünün. Sorun, böyle bir durumda kategoriyi silmeye çalışmadan önce tüm ürünlerin silinmesidir. Net sonuç, bu tür bir kategori için bu saklı yordamın tüm ürünlerini kaldırması, kategorinin ise başka bir tabloda ilgili kayıtları olduğu için kalmasıdır.

Ancak saklı yordam bir işlem kapsamında sarmalanmışsa, tablodaki Products silme işlemleri üzerindeki Categoriesbaşarısız silme işlemi karşısında geri alınır. Aşağıdaki saklı yordam betiği, iki DELETE deyim arasında bölünmezlik sağlamak için bir işlem kullanır:

CREATE PROCEDURE dbo.Categories_Delete
(
    @CategoryID int
)
AS
BEGIN TRY
  BEGIN TRANSACTION -- Start the transaction
  -- First, delete the associated products...
  DELETE FROM Products
  WHERE CategoryID = @CategoryID
  -- Now delete the category
  DELETE FROM Categories
  WHERE CategoryID = @CategoryID
  -- If we reach here, success!
  COMMIT TRANSACTION
END TRY
BEGIN CATCH 
  -- Whoops, there was an error
  ROLLBACK TRANSACTION
  -- Raise an error with the 
  -- details of the exception   
  DECLARE @ErrMsg nvarchar(4000),
          @ErrSeverity int 
  SELECT @ErrMsg = ERROR_MESSAGE(), 
         @ErrSeverity = ERROR_SEVERITY() 
 
  RAISERROR(@ErrMsg, @ErrSeverity, 1) 
END CATCH

Saklı yordamı Northwind veritabanına eklemek Categories_Delete için biraz bekleyin. Veritabanına saklı yordam ekleme yönergeleri için 1. Adıma geri bakın.

6. Adım:CategoriesTableAdapter

Veritabanına saklı yordamı eklediğimiz Categories_Delete sırada, DAL şu anda silme işlemini gerçekleştirmek için geçici SQL deyimlerini kullanacak şekilde yapılandırılmıştır. bunun yerine öğesini CategoriesTableAdapter güncelleştirmemiz ve saklı yordamı kullanması Categories_Delete için yönerge vermemiz gerekir.

Not

Bu öğreticinin önceki bölümlerinde DataSet ile NorthwindWithSprocs çalışıyorduk. Ancak DataSet yalnızca tek bir varlığa ProductsDataTablesahiptir ve kategorilerle çalışmamız gerekir. Bu nedenle, bu öğreticinin geri kalanında Veri Erişim Katmanı hakkında konuştuğumda, veri erişim katmanı oluşturma öğreticisinde ilk oluşturduğumuz DataSet'e başvuruyorumNorthwind.

Northwind DataSet'i açın, öğesini seçin CategoriesTableAdapterve Özellikler penceresi gidin. Özellikler penceresi, TableAdapter tarafından kullanılan , UpdateCommand, DeleteCommandve SelectCommand adlarının yanı sıra bağlantı bilgilerini listelerInsertCommand. DeleteCommand Ayrıntılarını görmek için özelliğini genişletin. Şekil 15'te gösterildiği gibi, DeleteCommand s CommandType özelliği Text olarak ayarlanmıştır. Bu özellik, özelliğindeki metni geçici bir SQL sorgusu olarak göndermesini CommandText ister.

Özellikler Penceresinde Özelliklerini Görüntülemek için Tasarımcıda CategoriesTableAdapter öğesini seçin

Şekil 15: Özellikler Penceresinde Özelliklerini Görüntülemek için Tasarımcıda öğesini seçin CategoriesTableAdapter

Bu ayarları değiştirmek için Özellikler penceresi (DeleteCommand) metnini seçin ve açılan listeden (Yeni) öğesini seçin. Bu, , CommandTypeve Parameters özellikleri için CommandTextayarları temizler. Ardından özelliğini StoredProcedure olarak ayarlayın CommandType ve ardından ()dbo.Categories_Delete için CommandText saklı yordamın adını yazın. Özellikleri şu sırayla girdiğinizden emin olursanız, önce CommandType ve sonra CommandText - Visual Studio Parameters koleksiyonunu otomatik olarak doldurur. Bu özellikleri bu sırada girmezseniz, Parametreleri Parametre Koleksiyonu Düzenleyicisi aracılığıyla el ile eklemeniz gerekir. Her iki durumda da, doğru parametre ayarları değişikliklerinin yapıldığını doğrulamak için Parametreler özelliğindeki üç noktaya tıklayarak Parametre Koleksiyonu Düzenleyicisi'ni açın (bkz. Şekil 16). İletişim kutusunda parametre görmüyorsanız, parametreyi @CategoryID el ile ekleyin (parametreyi @RETURN_VALUE eklemeniz gerekmez).

Parametre Ayarlarının Doğru Olduğundan Emin Olun

Şekil 16: Parametre Ayarlarının Doğru Olduğundan Emin Olun

DAL güncelleştirildikten sonra, bir kategori silindiğinde ilişkili tüm ürünler otomatik olarak silinir ve bunu işlem kapsamında yapar. Bunu doğrulamak için Varolan İkili Verileri Güncelleştirme ve Silme sayfasına dönün ve kategorilerden birinin Sil düğmesine tıklayın. Fareye tek tıklamayla, kategori ve ilişkili tüm ürünler silinir.

Not

Seçili kategoriyle birlikte bir dizi ürünü silecek saklı yordamı test Categories_Delete etmeden önce veritabanınızın yedek kopyasını oluşturmak akıllıca olabilir. içinde veritabanını kullanıyorsanız NORTHWND.MDF Visual Studio'yu App_Datakapatmanız ve içindeki MDF ve LDF dosyalarını App_Data başka bir klasöre kopyalamanız yeterlidir. İşlevselliği test ettikten sonra Visual Studio'yu kapatıp içindeki geçerli MDF ve LDF dosyalarını App_Data yedek kopyalarla değiştirerek veritabanını geri yükleyebilirsiniz.

Özet

TableAdapter sihirbazı bizim için otomatik olarak saklı yordamlar oluştururken, bu tür saklı yordamları önceden oluşturduğumuz veya bunları el ile veya başka araçlarla oluşturmak isteyebileceğimiz zamanlar olabilir. Bu tür senaryolara uyum sağlamak için TableAdapter, var olan bir saklı yordamı işaret eden şekilde de yapılandırılabilir. Bu öğreticide Visual Studio ortamı aracılığıyla veritabanına saklı yordamları el ile ekleme ve TableAdapter yöntemlerini bu saklı yordamlara aktarma konularını inceledik. Ayrıca saklı yordam içinden işlemleri başlatmak, işlemek ve geri döndürmek için kullanılan T-SQL komutlarını ve betik desenini inceledik.

Mutlu Programlama!

Yazar hakkında

Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışı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çirenleri Hilton Geisenow, S ren Jacob Lauritsen ve Teresa Murphy'ydi. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresine mitchell@4GuysFromRolla.combir satır bırakın.