Türü Belirtilmiş DataSet'in TableAdapter’ları için Mevcut Saklı Yordamları Kullanma (C#)
tarafından Scott Mitchell
Ö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
, CommitTransaction
vb.) 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.
Ş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_SelectByCategoryID
yeni bir saklı yordam ekler. Bu saklı yordam tek bir giriş parametresini (@CategoryID
tü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_SelectProductByCategoryID
değ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 PROCEDURE
saklı 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.
Ş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.
Ş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.
Ş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.
Ş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 GetProductsByCategoryID
olarak 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.
Ş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 GetProductsByCategoryID
türünde int
bir 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 true
ayarlayın. Ardından, akıllı etiketinden DropDownList öğesini adlı CategoriesDataSource
yeni 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.
Ş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)
Ş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 ListItem
iç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ı ProductsByCategoryDataSource
yeni 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.
Ş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)
Ş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.
Ş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.
Ş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
SqlTransaction
ADO.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 TRANSACTION
ve 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:
- İşlemin başlangıcını belirtin.
- İşlemi oluşturan SQL deyimlerini yürütür.
- 2. Adım'daki deyimlerden birinde hata varsa işlemi geri alın
- 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).
Ş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)
Ş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 NULL
olarak 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 Categories
baş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 ProductsDataTable
sahiptir 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 CategoriesTableAdapter
ve Özellikler penceresi gidin. Özellikler penceresi, TableAdapter tarafından kullanılan , UpdateCommand
, DeleteCommand
ve 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.
Ş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, , CommandType
ve Parameters
özellikleri için CommandText
ayarları 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).
Ş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_Data
kapatmanı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.