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 öğ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
, 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, 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.
Ş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_SelectByCategoryID
yeni bir saklı yordam ekler. Bu saklı yordam, tek bir giriş parametresini (@CategoryID
tü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_SelectProductByCategoryID
ALTER PROCEDURE
dbo.Products_SelectProductByCategoryID
olarak 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 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
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 NorthwindWithSprocs
Products_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.
Ş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 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.
Ş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 GetProductsByCategoryID
olarak 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: 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 true
ayarlayın. Ardından, akıllı etiketinden DropDownList'i adlı CategoriesDataSource
yeni bir ObjectDataSource'a bağlayın. ObjectDataSource'ı, sınıfın CategoriesBLL
GetCategories
yönteminden verilerini alacak şekilde 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 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 ListItem
iç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'ı ID
ProductsByCategory
olarak ayarlayın ve akıllı etiketinden adlı yeni bir ObjectDataSource'a ProductsByCategoryDataSource
bağ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.
Ş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ı 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.
Ş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.
Ş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
SqlTransaction
ADO.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 TRANSACTION
ve 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:
- İşlemin başlangıcını belirtin.
- İşlemi oluşturan SQL deyimlerini yürütür.
- 2. Adımdaki deyimlerden birinde hata varsa işlemi geri alın
- 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).
Ş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)
Ş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 NULL
olarak 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 Categories
baş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 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ı 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.
Ş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 , CommandType
ve Parameters
özelliklerinin ayarlarını CommandText
temizler. 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).
Ş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_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 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.
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