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

tarafından Scott Mitchell

PDF’yi İndir

Ö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 öğreneceğiz. Ayrıca veritabanımıza el ile yeni saklı yordamlar eklemeyi de öğreniriz.

Giriş

Önceki öğreticide, Typed DataSet'in TableAdapters'larını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 nasıl oluşturacağını inceledik. Eski bir uygulamayı ASP.NET 2.0'a aktarırken veya mevcut bir veri modelinin çevresinde bir ASP.NET 2.0 web sitesi oluştururken, veritabanında ihtiyacımız olan saklı yordamların zaten mevcut olması olasılığı vardır. 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ımlara da göz atacağız. Haydi başlayalım!

Not

İşlem öğreticisindeki 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, bir işlem kapsamında saklı yordamın deyimlerini yürütmek için kullanılan T-SQL komutlarını keşfedeceğ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ünü Right-Click ve Yeni Saklı Yordam Ekle(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ği kullanıma alıp 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ünde int) kabul eder ve eşleşen CategoryID değere sahip ürünlerin tüm alanlarını 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 ile olan inceliği CREATE PROCEDURE dbo.Products_SelectProductByCategoryIDALTER PROCEDUREdbo.Products_SelectProductByCategoryIDolarak değiştirir. CREATE PROCEDURE veritabanına yeni bir saklı yordam eklerken ALTER PROCEDURE , var olan 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

Saklı yordam veritabanına eklendiğine göre Products_SelectByCategoryID , 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 Türlenmiş Veri Kümesinde NorthwindWithSprocsProducts_SelectByCategoryID öğesine bir GetProductsByCategoryID(categoryID) yöntem ProductsTableAdapter ekleyeceğiz.

DataSet'i NorthwindWithSprocs açarak başlayın. TableAdapter 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 bağlayacağız. Bu nedenle, sihirbazın ilk adımında Var olan saklı yordamı kullan seçeneğini belirleyin ve İleri'ye tıklayın.

Var olan 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 atanan değeri object 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ü belirtme

Ş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, kullanılacak yöntem desenlerini ve ardından bu yöntemlerin adlarını belirtmektir. Hem DataTable Doldur hem de DataTable Döndür seçeneklerini işaretli bırakın, ancak yöntemleri FillByCategoryID ve GetProductsByCategoryIDolarak 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: parametreleri parametre koleksiyonuna 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, bir 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 AdvancedDAL sayfayı ExistingSprocs.aspx açın ve Araç Kutusundan bir DropDownList öğesini Tasarım Aracı sürükleyin. DropDownList s ID özelliğini olarak Categories ve AutoPostBack özelliğini olarak trueayarlayın. Ardından, akıllı etiketinden DropDownList'i adlı CategoriesDataSourceyeni bir ObjectDataSource'a bağlayın. ObjectDataSource'ı, sınıfın CategoriesBLLGetCategories yönteminden verilerini alacak şekilde 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 Drop-Down Listeler (Yok) olarak ayarlayın

Şekil 8: UPDATE, INSERT ve DELETE Sekmelerindeki Drop-Down Listeler (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şaretleme 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ım Aracı sürükleyip DropDownList öğesinin altına yerleştirin. GridView'ı IDProductsByCategory olarak ayarlayın ve akıllı etiketinden adlı yeni bir ObjectDataSource'a ProductsByCategoryDataSourcebağlayın. ProductsByCategoryDataSource yöntemini kullanarak verilerini almasını sağlayarak ObjectDataSource'u sınıfını GetProductsByCategoryID(categoryID) kullanacak ProductsBLLWithSprocs şekilde 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ı sorar. 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 Category DropDownList Kullanma

Şekil 11: Parametrenin Categories Kaynağı categoryID olarak DropDownList kullanın (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.

Sayfayı bir tarayıcı üzerinden 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.

Ürün 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 şemsiyesi altında gerçekleştirilen değişikliklerin tümünün başarılı veya tamamen 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 Veritabanı Değişikliklerini Sarmalama , 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şlatmaya, işlemeye ve geri döndürmeye yönelik üç temel SQL komutu sırasıyla , COMMIT TRANSACTIONve ROLLBACK TRANSACTIONşeklindedirBEGIN TRANSACTION. ADO.NET yaklaşımında olduğu gibi saklı yordamın 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ımdaki deyimlerden birinde hata varsa işlemi geri alın
  4. 2. Adımdaki tüm deyimler hatasız tamamlanırsa işlemi yürütebilirsiniz.

Bu düzen, 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 blok tanımlayarak TRY...CATCH başlar. try...catch C# dilindeki 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 deyimi COMMIT TRANSACTION değişiklikleri işler ve işlemi tamamlar. Bununla birlikte, deyimlerden biri hatayla sonuçlanırsa, ROLLBACK TRANSACTION bloğundaki CATCH veritabanı işlemin başlangıcından önceki durumuna döner. Saklı yordam ayrıca RAISERROR komutunu kullanarak bir hata oluşturur ve bu da uygulamada bir SqlException oluşmasına neden olur.

Not

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

Somut bir örneğe bakalım. ve tabloları arasında Categories yabancı anahtar kısıtlaması vardır; yani tablodaki Products her CategoryID alan tablodaki Categories bir CategoryID değerle eşlenmelidir.Products İ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ıtlama 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 İçecekler gibi ilişkili ürünler içeren bir kategoriyi silmeye çalışırsanız, silme işlemi yabancı anahtar kısıtlama 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 resmi 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 resmi görüntülemek için tıklayın)

Ancak, ilişkili ürünlere sahip olup olmadıklarından bağımsız olarak kategorilerin silinmesine izin vermek istediğimizi düşünün. Ürünler içeren bir kategori silindiğinde, mevcut ürünlerini de silmek istediğimizi düşünün (ancak başka bir seçenek, ürün CategoryID değerlerini NULLolarak ayarlamak olabilir). Bu işlevsellik, yabancı anahtar kısıtlamasının art arda kuralları aracılığıyla uygulanabilir. Alternatif olarak, bir giriş parametresi 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 girişimimiz 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. Üzerinde belirli @CategoryID bir değerin silinmesini yasaklayan başka bir yabancı anahtar kısıtlaması Categories olduğunu düşünün. Sorun, böyle bir durumda biz kategoriyi silmeye çalışmadan önce tüm ürünlerin silineceğidir. Net sonuç, böyle bir kategori için bu saklı yordamın tüm ürünlerini kaldıracağı ve kategorinin hala başka bir tabloda ilgili kayıtları olduğu için kalmasıdır.

Ancak saklı yordam bir işlem kapsamında sarmalanmışsa, tablosundaki Products silme işlemleri üzerindeki Categoriesbaşarısız silme işlemine karşı 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 zaman ayırın. Veritabanına saklı yordam ekleme yönergeleri için 1. Adıma geri bakın.

6. Adım: GüncelleştirmeCategoriesTableAdapter

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. öğesini güncelleştirmemiz CategoriesTableAdapter ve saklı yordamı kullanmasını Categories_Delete emretmeliyiz.

Not

Bu öğreticinin önceki bölümlerinde DataSet ile NorthwindWithSprocs çalışıyorduk. Ancak bu 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ı ve 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 ayarlanır ve bu özellikteki metni geçici bir SQL sorgusu olarak göndermesini CommandText ister.

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

Şekil 15: Özellikler Penceresinde Özelliklerini Görüntülemek için Tasarım Aracı öğ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 işlem , CommandTypeve Parameters özelliklerinin ayarlarını CommandTexttemizler. Ardından özelliğini olarak StoredProcedure 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 olun: önce CommandType ve ardından CommandText - Visual Studio Parameters koleksiyonunu otomatik olarak doldurur. Bu özellikleri bu sırayla girmezseniz, parametreleri Parameters Collection Düzenleyici aracılığıyla el ile eklemeniz gerekir. Her iki durumda da parametreler özelliğindeki üç noktaya tıklayarak Parametre Koleksiyonu Düzenleyici doğru parametre ayarları değişikliklerinin yapıldığını doğrulamanız önerilir (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. Farenin tek bir tıklamasıyla, kategori ve ilişkili tüm ürünler silinir.

Not

Seçilen kategoriyle birlikte bir dizi ürünü silecek saklı yordamı test Categories_Delete etmeden önce veritabanınızın yedek bir kopyasını oluşturmak akıllıca olabilir. içindeki 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 etmek üzere de yapılandırılabilir. Bu öğreticide Visual Studio ortamı aracılığıyla veritabanına el ile saklı yordam ekleme ve TableAdapter yöntemlerinin bu saklı yordamlara nasıl bağlanacakları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ış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çirenleri Hilton Geisenow, S ren Jacob Lauritsen ve Teresa Murphy'ydi. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır mitchell@4GuysFromRolla.combırakın.