Türü Belirtilmiş DataSet'in TableAdapter’ları için Mevcut Saklı Yordamları Kullanma (VB)
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(<_i22_>categoryID)<!--_i22_-->
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 Integer
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 Function GetProductsByCategoryID(ByVal categoryID As Integer) _
As NorthwindWithSprocs.ProductsDataTable
Return Adapter.GetProductsByCategoryID(categoryID)
End Function
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'ı 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: Parametrenin Categories
Kaynağı categoryID
olarak DropDownList değerini 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.
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 listeyi alternatif bir kategoriye değiştirmek 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şlem kapsamı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
System.Transactions
sınıfları kullanarak, - 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ı yordamın içine ekleme
İşlem öğreticisindeki Sarmalama Veritabanı Değişiklikleri DAL'deki ADO.NET sınıflarını kullandı. Bu öğreticinin geri kalanında, saklı bir yordamın içinden T-SQL komutlarını kullanarak bir işlemin nasıl yönetileceği açıklanır.
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ımdaki 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
Visual Basic'teki 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ğuna 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. Ancak, deyimlerden biri hatayla sonuçlanırsa, ROLLBACK TRANSACTION
bloğunda CATCH
veritabanı işlem başlamadan önceki durumuna döndürülüyor. 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'nin 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 İçecekler 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ünler içeren 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 (başka bir seçenek de ü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 kategoriyi silmeye çalışmadan önce tüm ürünlerin silinecek olmasıdır. 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 hala ilişkili kayıtları olduğu için kalmasıdır.
Ancak saklı yordam bir işlem kapsamında sarmalanmışsa, tabloya Products
yapılan silme işlemleri üzerinde 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 zaman ayırın. 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. öğesini güncelleştirmemiz CategoriesTableAdapter
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 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şvuruda Northwind
bulunurum.
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 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ı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, , CommandType
ve Parameters
özellikleri için CommandText
ayarları 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 bu sırayla girdiğinizden eminseniz ( önce CommandType
ve ardından CommandText
- Visual Studio Parametreler 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, doğru parametre ayarları değişikliklerinin yapıldığını doğrulamak üzere Parameters Collection Düzenleyici getirmek için Parameters özelliğindeki üç noktaya tıklamak akıllıca olur (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ünleri otomatik olarak silinir ve bunu işlem kapsamında yapar. Bunu doğrulamak için Mevcut İkili Verileri Güncelleştirme ve Silme sayfasına dönün ve kategorilerden biri için Sil düğmesine tıklayın. Fareye tek bir tıklamayla 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 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ştursa da, bu tür saklı yordamların zaten oluşturulduğu veya bunları el ile veya diğer 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 bir 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