Veri Erişim Katmanını Oluşturma (VB)
tarafından Scott Mitchell
Bu öğreticide, veritabanındaki bilgilere erişmek için en baştan başlayacağız ve yazılan DataSets kullanarak Veri Erişim Katmanı'nı (DAL) oluşturacağız.
Giriş
Web geliştiricileri olarak hayatlarımız verilerle çalışma etrafında döner. Verileri depolamak için veritabanları, almak ve değiştirmek için kod ve bunları toplamak ve özetlemek için web sayfaları oluştururuz. Bu, ASP.NET 2.0'da bu yaygın desenleri uygulamaya yönelik teknikleri keşfedecek uzun bir serideki ilk öğreticidir. Typed DataSets kullanarak Veri Erişim Katmanından (DAL) oluşan bir yazılım mimarisi , özel iş kurallarını zorunlu kılan bir İş Mantığı Katmanı (BLL) ve ortak bir sayfa düzenini paylaşan ASP.NET sayfalardan oluşan bir sunu katmanı oluşturmayla başlayacağız. Bu arka uç temel çalışması yapıldıktan sonra, bir web uygulamasındaki verilerin nasıl görüntüleneceğini, özetleneceğini, toplandığını ve doğrulandığını gösteren raporlamaya geçeceğiz. Bu öğreticiler kısa olacak şekilde hazırlandı ve işlemde görsel olarak size yol gösterirken birçok ekran görüntüsüyle birlikte adım adım yönergeler sağlar. Her öğretici C# ve Visual Basic sürümlerinde kullanılabilir ve kullanılan kodun tamamının indirilmesini içerir. (Bu ilk öğretici oldukça uzundur, ancak gerisi çok daha sindirilebilir öbekler halinde sunulur.)
Bu öğreticiler için dizine yerleştirilen App_Data
Northwind veritabanının Microsoft SQL Server 2005 Express Sürüm sürümünü kullanacağız. Veritabanı dosyasına ek olarak, App_Data
farklı bir veritabanı sürümü kullanmak istemeniz durumunda, klasör veritabanını oluşturmaya yönelik SQL betiklerini de içerir. Northwind veritabanının farklı bir SQL Server sürümünü kullanıyorsanız, uygulamanın Web.config
dosyasındaki ayarı güncelleştirmeniz NORTHWNDConnectionString
gerekir. Web uygulaması, dosya sistemi tabanlı bir Web sitesi projesi olarak Visual Studio 2005 Professional Edition kullanılarak oluşturulmuştu. Ancak tüm öğreticiler Visual Studio 2005, Visual Web Developer'ın ücretsiz sürümüyle aynı derecede iyi çalışır.
Bu öğreticide en baştan başlayacağız ve Veri Erişim Katmanı'nı (DAL) oluşturacak, ardından ikinci öğreticide İş Mantığı Katmanı 'nı (BLL) oluşturacak ve üçüncü öğreticide sayfa düzeni ve gezinti üzerinde çalışacağız. Üçüncüden sonraki öğreticiler, ilk üçte atılan temeli temel alır. Bu ilk öğreticide ele alacağımız çok şey var, bu nedenle Visual Studio'yu başlatın ve başlayalım!
1. Adım: Web Projesi Oluşturma ve Veritabanına Bağlanma
Veri Erişim Katmanımızı (DAL) oluşturabilmek için önce bir web sitesi oluşturmamız ve veritabanımızı kurmamız gerekir. Başlangıç olarak yeni bir dosya sistemi tabanlı ASP.NET web sitesi oluşturun. Bunu yapmak için Dosya menüsüne gidin ve Yeni Web Sitesi'ni seçerek Yeni Web Sitesi iletişim kutusunu görüntüleyin. ASP.NET Web Sitesi şablonunu seçin, Konum açılan listesini Dosya Sistemi olarak ayarlayın, web sitesini yerleştirmek için bir klasör seçin ve dili Visual Basic olarak ayarlayın.
Şekil 1: Web Sitesi System-Based Yeni Dosya Oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu, ASP.NET sayfası, klasörü ve dosyası olan Default.aspx
yeni bir App_Data
Web.config
web sitesi oluşturur.
Web sitesi oluşturulduğunda, sonraki adım Visual Studio'nun Sunucu Gezgini'nde veritabanına bir başvuru eklemektir. Sunucu Gezgini'ne veritabanı ekleyerek, Visual Studio'dan tablolar, saklı yordamlar, görünümler vb. ekleyebilirsiniz. Ayrıca tablo verilerini görüntüleyebilir veya Sorgu Oluşturucusu aracılığıyla el ile veya grafik olarak kendi sorgularınızı oluşturabilirsiniz. Ayrıca, DAL için Yazılan Veri Kümeleri'ni oluştururken Visual Studio'yu, Türü Belirtilen Veri Kümelerinin oluşturulması gereken veritabanına işaret etmemiz gerekir. Bu bağlantı bilgilerini o anda sağlayabildiğimiz halde Visual Studio, Sunucu Gezgini'nde kayıtlı olan veritabanlarının açılan listesini otomatik olarak doldurur.
Northwind veritabanını Sunucu Gezgini'ne ekleme adımları, klasördeki App_Data
SQL Server 2005 Express Sürüm veritabanını kullanmak isteyip istemediğinize veya bunun yerine kullanmak istediğiniz bir Microsoft SQL Server 2000 veya 2005 veritabanı sunucusu kurulumunuz olup olmadığına bağlıdır.
Klasörde VeritabanıApp_Data
Kullanma
Bağlanacak SQL Server 2000 veya 2005 veritabanı sunucunuz yoksa veya veritabanını bir veritabanı sunucusuna eklemek zorunda kalmak istemiyorsanız, indirilen web sitesinin App_Data
klasöründe (NORTHWND.MDF
) bulunan Northwind veritabanının SQL Server 2005 Express Sürüm sürümünü kullanabilirsiniz.
Klasöre App_Data
yerleştirilen bir veritabanı otomatik olarak Sunucu Gezgini'ne eklenir. Makinenizde SQL Server 2005 Express Sürüm yüklü olduğunu varsayarsak NORTHWND adlı bir düğüm görmeniz gerekir. Sunucu Gezgini'nde tablolarını, görünümlerini, saklı yordamı vb. genişletip keşfedebileceğiniz MDF (bkz. Şekil 2).
KlasörApp_Data
, SQL Server benzerleri gibi sunucu gezginine otomatik olarak eklenen Microsoft Access .mdb
dosyalarını da barındırabilir. SQL Server seçeneklerinden herhangi birini kullanmak istemiyorsanız, her zaman Northwind Traders veritabanını ve uygulamalarını yükleyebilir ve dizine App_Data
bırakabilirsiniz. Bununla birlikte, Access veritabanlarının SQL Server kadar zengin özelliklere sahip olmadığını ve web sitesi senaryolarında kullanılmak üzere tasarlanmamış olduğunu unutmayın. Ayrıca, 35'inden fazla öğreticiden birkaçı Access tarafından desteklenmeyen bazı veritabanı düzeyinde özellikleri kullanır.
Microsoft SQL Server 2000 veya 2005 Veritabanı Sunucusunda Veritabanına Bağlanma
Alternatif olarak, bir veritabanı sunucusunda yüklü bir Northwind veritabanına bağlanabilirsiniz. Veritabanı sunucusunda Northwind veritabanı yüklü değilse, önce bu öğreticinin indirmesine dahil edilen yükleme betiğini çalıştırarak bunu veritabanı sunucusuna eklemeniz gerekir.
Veritabanını yükledikten sonra Visual Studio'da Sunucu Gezgini'ne gidin, Veri Connections düğümüne sağ tıklayın ve Bağlantı Ekle'yi seçin. Sunucu Gezgini'ni görmüyorsanız Görünüm / Sunucu Gezgini'ne gidin veya Ctrl+Alt+S tuşlarına basın. Bu, bağlanılacak sunucuyu, kimlik doğrulama bilgilerini ve veritabanı adını belirtebileceğiniz Bağlantı Ekle iletişim kutusunu açar. Veritabanı bağlantı bilgilerini başarıyla yapılandırdıktan ve Tamam düğmesine tıkladığınızda veritabanı, Veri Connections düğüm altına düğüm olarak eklenir. Tablolarını, görünümlerini, saklı yordamlarını vb. keşfetmek için veritabanı düğümünü genişletebilirsiniz.
Şekil 2: Veritabanı Sunucunuzun Northwind Veritabanına Bağlantı Ekleme
2. Adım: Veri Erişim KatmanıNı Oluşturma
Verilerle çalışırken tek seçenek, verilere özgü mantığı doğrudan sunu katmanına eklemektir (web uygulamasında, ASP.NET sayfalar sunu katmanını oluşturur). Bu, ASP.NET sayfasının kod bölümüne ADO.NET kod yazma veya işaretleme bölümünden SqlDataSource denetimini kullanma biçiminde olabilir. Her iki durumda da, bu yaklaşım veri erişim mantığını sunu katmanıyla sıkı bir şekilde bağlar. Ancak önerilen yaklaşım, veri erişim mantığını sunu katmanından ayırmaktır. Bu ayrı katman Veri Erişim Katmanı, kısaca DAL olarak adlandırılır ve genellikle ayrı bir Sınıf Kitaplığı projesi olarak uygulanır. Bu katmanlı mimarinin avantajları iyi belgelenmiştir (bu avantajlar hakkında bilgi edinmek için bu öğreticinin sonundaki "Daha Fazla Okuma" bölümüne bakın) ve bu seride alacağımız yaklaşımdır.
Veritabanına bağlantı oluşturma, verme INSERT
, SELECT
, UPDATE
ve DELETE
komutları gibi temel alınan veri kaynağına özgü tüm kodlar DAL'de bulunmalıdır. Sunu katmanı bu tür veri erişim koduna başvuru içermemelidir, bunun yerine tüm veri istekleri için DAL'ye çağrı yapmalıdır. Veri Erişim Katmanları genellikle temel alınan veritabanı verilerine erişmek için yöntemler içerir. Örneğin Northwind veritabanında, satışa sunulan ürünleri ve ait oldukları kategorileri kaydeden ve Categories
tabloları vardırProducts
. DAL'mizde şu yöntemlere sahip olacağız:
GetCategories(),
tüm kategoriler hakkında bilgi döndürecekGetProducts()
, tüm ürünlerle ilgili bilgileri döndürürGetProductsByCategoryID(categoryID)
, belirtilen bir kategoriye ait tüm ürünleri döndürürGetProductByProductID(productID)
, belirli bir ürünle ilgili bilgileri döndürür
Bu yöntemler çağrıldığında veritabanına bağlanır, uygun sorguyu gönderir ve sonuçları döndürür. Bu sonuçları nasıl döndürebileceğimiz önemlidir. Bu yöntemler yalnızca veritabanı sorgusu tarafından doldurulan bir DataSet veya DataReader döndürebilir, ancak ideal olarak bu sonuçların kesin olarak yazılan nesneler kullanılarak döndürülmesi gerekir. Kesin olarak türü belirlenmiş bir nesne, şeması derleme zamanında katı bir şekilde tanımlanmış olan nesnedir; bunun tersi, gevşek türemiş bir nesne ise çalışma zamanına kadar şeması bilinmeyen bir nesnedir.
Örneğin, DataReader ve DataSet (varsayılan olarak) gevşek türemiş nesnelerdir çünkü şemaları bunları doldurmak için kullanılan veritabanı sorgusu tarafından döndürülen sütunlar tarafından tanımlanır. Gevşek türe sahip bir DataTable'dan belirli bir sütuna erişmek için şu söz dizimini kullanmamız gerekir: DataTable.Rows(index)("columnName")
. DataTable'ın bu örnekteki gevşek yazması, sütun adına bir dize veya sıralı dizin kullanarak erişmemiz gerektiği gerçeğiyle ortaya konur. Güçlü türe sahip bir DataTable ise sütunlarının her birinin özellik olarak uygulanmasına ve bunun sonucunda şuna benzer bir kod elde edilir: DataTable.Rows(index).columnName
.
Kesin olarak yazılan nesneleri döndürmek için geliştiriciler kendi özel iş nesnelerini oluşturabilir veya Türü Belirlenmiş Veri Kümeleri kullanabilir. İş nesnesi, geliştirici tarafından özellikleri genellikle iş nesnesinin temsil ettiği temel veritabanı tablosunun sütunlarını yansıtan bir sınıf olarak uygulanır. Türü Belirlenmiş DataSet, veritabanı şemasına dayalı olarak Visual Studio tarafından sizin için oluşturulan ve üyeleri bu şemaya göre kesin olarak yazılan bir sınıftır. Typed DataSet'in kendisi ADO.NET DataSet, DataTable ve DataRow sınıflarını genişleten sınıflardan oluşur. Türü kesin olarak belirlenmiş DataTable'lara ek olarak, Yazılan Veri Kümeleri artık DataSet'in DataTable'larını doldurma ve DataTable'lar içindeki değişiklikleri veritabanına geri yayma yöntemlerine sahip olan TableAdapters'ı da içerir.
Not
Yazılan Veri Kümelerini ve özel iş nesnelerini kullanmanın avantajları ve dezavantajları hakkında daha fazla bilgi için Bkz. Veri Katmanı Bileşenleri Tasarlama ve Verileri KatmanlarDan Geçirme.
Bu öğreticilerin mimarisi için kesin olarak türlenmiş DataSets kullanacağız. Şekil 3'de, Bir uygulamanın Typed DataSets kullanan farklı katmanları arasındaki iş akışı gösterilmektedir.
Şekil 3: Tüm Veri Erişim Kodu DAL'ye Relegated (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Türlenmiş DataSet ve Tablo Bağdaştırıcısı Oluşturma
DAL'mizi oluşturmaya başlamak için, projemize Bir Türlenmiş Veri Kümesi ekleyerek başlayacağız. Bunu yapmak için Çözüm Gezgini proje düğümüne sağ tıklayın ve Yeni Öğe Ekle'yi seçin. Şablon listesinden DataSet seçeneğini belirleyin ve olarak adlandırın Northwind.xsd
.
Şekil 4: Projenize Yeni Veri Kümesi Eklemeyi Seçin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ekle'ye tıkladıktan sonra, DataSet'i App_Code
klasöre eklemeniz istendiğinde Evet'i seçin. Daha sonra, Yazılan Veri Kümesi için Tasarım Aracı görüntülenir ve TableAdapter Yapılandırma Sihirbazı başlatılır; böylece, Yazılan Veri Kümesine ilk TableAdapter'ınızı ekleyebilirsiniz.
Türü Belirlenmiş Veri Kümesi, kesin olarak türü belirlenmiş bir veri koleksiyonu görevi görür; her biri kesin olarak belirlenmiş DataRow örneklerinden oluşan, kesin türe sahip DataTable örneklerinden oluşur. Bu öğreticiler serisinde birlikte çalışmamız gereken temel alınan veritabanı tablolarının her biri için kesin olarak türlenmiş bir DataTable oluşturacağız. Tablo için Products
bir DataTable oluşturarak başlayalım.
Kesin olarak türü belirlenmiş DataTable'ların, temel alınan veritabanı tablolarındaki verilere nasıl erişeceklerine ilişkin herhangi bir bilgi içermediğini unutmayın. DataTable'ı doldurmak üzere verileri almak için, Veri Erişim Katmanımız olarak işlev gören bir TableAdapter sınıfı kullanırız. DataTable'ımız Products
için TableAdapter, sunu katmanından çağıracağımız , GetProductByCategoryID(categoryID)
vb. yöntemlerini GetProducts()
içerir. DataTable'ın rolü, katmanlar arasında veri geçirmek için kullanılan kesin olarak belirlenmiş nesneler olarak görev yapmaktır.
TableAdapter Yapılandırma Sihirbazı, hangi veritabanıyla çalışabileceğinizi seçmenizi isteyip istemediğinizi sorarak başlar. Açılan listede bu veritabanları Sunucu Gezgini'nde gösterilir. Northwind veritabanını Sunucu Gezgini'ne eklemediyseniz, şu anda Yeni Bağlantı düğmesine tıklayarak bunu yapabilirsiniz.
Şekil 5: Drop-Down Listesinden Northwind Veritabanı'nı seçin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Veritabanını seçip İleri'ye tıkladıktan sonra, bağlantı dizesi Web.config
dosyaya kaydetmek isteyip istemediğiniz sorulur. bağlantı dizesi kaydederek TableAdapter sınıflarında sabit kodlanmış olmasını önlersiniz, bu da gelecekte bağlantı dizesi bilgiler değişirse işleri basitleştirir. bağlantı dizesi yapılandırma dosyasına <connectionStrings>
kaydetmeyi tercih ederseniz, daha iyi güvenlik için isteğe bağlı olarak şifrelenebilir veya daha sonra YÖNETICILER için daha ideal olan IIS GUI Yönetici Aracı içindeki yeni ASP.NET 2.0 Özellik Sayfası aracılığıyla değiştirilebilir.
Şekil 6: Bağlantı Dizesini Web.config
kaydetme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Daha sonra, kesin olarak türü kesin belirlenmiş ilk DataTable için şemayı tanımlamamız ve kesin olarak türü belirlenmiş DataSet'i doldurarak TableAdapter'ımız için kullanılacak ilk yöntemi sağlamamız gerekir. Bu iki adım, DataTable'ımızdaki yansıtılmasını istediğimiz tablodaki sütunları döndüren bir sorgu oluşturularak aynı anda gerçekleştirilir. Sihirbazın sonunda bu sorguya bir yöntem adı vereceğiz. Bu işlem tamamlandıktan sonra bu yöntem sunu katmanımızdan çağrılabilir. yöntemi tanımlı sorguyu yürütür ve kesin türü belirlenmiş bir DataTable'ı doldurur.
SQL sorgusunu tanımlamaya başlamak için önce TableAdapter'ın sorguyu nasıl yayınlamasını istediğimizi belirtmemiz gerekir. Geçici bir SQL deyimi kullanabilir, yeni bir saklı yordam oluşturabilir veya mevcut bir saklı yordamı kullanabiliriz. Bu öğreticiler için geçici SQL deyimlerini kullanacağız.
Şekil 7: Geçici SQL Deyimi Kullanarak Verileri Sorgulama (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu noktada SQL sorgusunu el ile yazabiliriz. TableAdapter'da ilk yöntemi oluştururken genellikle sorgunun ilgili DataTable'da ifade edilmesi gereken sütunları döndürmesini istersiniz. Bunu, tablodaki Products
tüm sütunları ve tüm satırları döndüren bir sorgu oluşturarak gerçekleştirebiliriz:
Şekil 8: Metin Kutusuna SQL Sorgusu Girin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Alternatif olarak, Şekil 9'da gösterildiği gibi Sorgu Oluşturucusu'nu kullanın ve sorguyu grafik olarak oluştur.
Şekil 9: sorguyu Sorgu Düzenleyicisi aracılığıyla Grafik olarak oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sorguyu oluşturduktan sonra, ancak sonraki ekrana geçmeden önce Gelişmiş Seçenekler düğmesine tıklayın. Web Sitesi Projelerinde, "Ekle, Güncelleştir ve Sil deyimleri oluştur" varsayılan olarak seçilen tek gelişmiş seçenektir; Bu sihirbazı bir Sınıf Kitaplığı veya Windows Projesi'nden çalıştırırsanız "İyimser eşzamanlılık kullan" seçeneği de seçilir. "İyimser eşzamanlılık kullan" seçeneğini şimdilik işaretsiz bırakın. Gelecek öğreticilerde iyimser eşzamanlılığı inceleyeceğiz.
Şekil 10: Yalnızca Ekle, Güncelleştir ve Sil deyimleri Oluştur Seçeneğini belirleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)
Gelişmiş seçenekleri doğruladıktan sonra, son ekrana geçmek için İleri'ye tıklayın. Burada TableAdapter'a hangi yöntemlerin ekleneceğini seçmeniz istenir. Verileri doldurmaya yönelik iki desen vardır:
- DataTable'ı bu yaklaşımla doldurma DataTable'ı parametre olarak alan ve sorgunun sonuçlarına göre dolduran bir yöntem oluşturulur. Örneğin ADO.NET DataAdapter sınıfı, yöntemiyle bu deseni
Fill()
uygular. - Yöntemin sizin için DataTable'ı oluşturup doldurduğu ve yöntem değer döndürdüğünde döndürdüğü bu yaklaşımla bir DataTable döndürür.
TableAdapter'ın bu desenlerden birini veya her ikisini birden gerçekleştirmesini sağlayabilirsiniz. Burada sağlanan yöntemleri de yeniden adlandırabilirsiniz. Bu öğreticiler boyunca yalnızca ikinci düzeni kullansak bile her iki onay kutusunu da işaretli bırakalım. Ayrıca, oldukça genel GetData
yöntemi GetProducts
olarak yeniden adlandıralım.
İşaretlenirse, "GenerateDBDirectMethods" son onay kutusu TableAdapter için , Update()
ve Delete()
yöntemlerini oluştururInsert()
. Bu seçeneği işaretsiz bırakırsanız, tüm güncelleştirmelerin TableAdapter'ın Typed DataSet, DataTable, tek bir DataRow veya DataRows dizisini alan tek Update()
yöntemi aracılığıyla yapılması gerekir. (Şekil 9'daki gelişmiş özelliklerden "Ekle, Güncelleştir ve Sil deyimleri oluştur" seçeneğinin işaretini kaldırdıysanız, bu onay kutusunun ayarının hiçbir etkisi olmaz.) Bu onay kutusunu seçili bırakalım.
Şekil 11: Yöntem Adını olarak GetData
GetProducts
değiştirin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Son'a tıklayarak sihirbazı tamamlayın. Sihirbaz kapatıldıktan sonra, yeni oluşturduğumuz DataTable'ı gösteren DataSet Tasarım Aracı döndürülür. DataTable'da Products
sütunların listesini (ProductID
, ProductName
vb.) ve (Fill()
ve GetProducts()
) yöntemlerini ProductsTableAdapter
görebilirsiniz.
Şekil 12: Products
DataTable ve ProductsTableAdapter
Yazılan Veri Kümesine Eklendi (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu noktada, tek bir DataTable (Northwind.Products
) ve bir yöntemi olan kesin olarak belirlenmiş bir DataAdapter sınıfına () sahip GetProducts()
Bir Türü Belirlenmiş DataSet'imiz vardırNorthwindTableAdapters.ProductsTableAdapter
. Bu nesneler, aşağıdaki gibi kodlardan tüm ürünlerin listesine erişmek için kullanılabilir:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
Dim products as Northwind.ProductsDataTable
products = productsAdapter.GetProducts()
For Each productRow As Northwind.ProductsRow In products
Response.Write("Product: " & productRow.ProductName & "<br />")
Next
Bu kod, veri erişimine özgü bir kod yazmamızı gerektirmez. Hiçbir ADO.NET sınıfı örneği oluşturmadık, bağlantı dizelerine, SQL sorgularına veya saklı yordamlara başvurmak zorunda değildik. Bunun yerine TableAdapter, bizim için alt düzey veri erişim kodunu sağlar.
Bu örnekte kullanılan her nesne kesin olarak türlenmiş olduğundan Visual Studio'ya IntelliSense ve derleme zamanı türü denetimi sağlanır. TableAdapter tarafından döndürülen tüm DataTable'ların en iyisi GridView, DetailsView, DropDownList, CheckBoxList ve diğerleri gibi ASP.NET veri Web denetimlerine bağlanabilir. Aşağıdaki örnekte, yöntemi tarafından GetProducts()
döndürülen DataTable'ın olay işleyicisi içinde yalnızca taranmış üç kod satırı içinde Page_Load
bir GridView'a bağlanması gösterilmektedir.
AllProducts.aspx
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="AllProducts.aspx.vb"
Inherits="AllProducts" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>View All Products in a GridView</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>
All Products</h1>
<p>
<asp:GridView ID="GridView1" runat="server"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
AllProducts.aspx.vb
Imports NorthwindTableAdapters
Partial Class AllProducts
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim productsAdapter As New ProductsTableAdapter
GridView1.DataSource = productsAdapter.GetProducts()
GridView1.DataBind()
End Sub
End Class
Şekil 13: Ürün Listesi GridView'da Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu örnek, ASP.NET sayfamızın Page_Load
olay işleyicisine üç satır kod yazmamızı gerektirse de, gelecek öğreticilerde DAL'den verileri bildirimli olarak almak için ObjectDataSource'un nasıl kullanılacağını inceleyeceğiz. ObjectDataSource ile kod yazmamız gerekmeyecek ve sayfalama ve sıralama desteği de alacağız!
3. Adım: Veri Erişim Katmanına Parametreli Yöntemler Ekleme
Bu noktada sınıfımızda ProductsTableAdapter
veritabanındaki tüm ürünleri döndüren tek bir yöntemi GetProducts()
vardır. Tüm ürünlerle çalışabilmek kesinlikle yararlı olsa da belirli bir ürün veya belirli bir kategoriye ait tüm ürünler hakkında bilgi almak istediğimiz zamanlar olabilir. Veri Erişim Katmanımıza bu tür işlevler eklemek için TableAdapter'a parametreli yöntemler ekleyebiliriz.
Yöntemini ekleyelim GetProductsByCategoryID(categoryID)
. DAL'ye yeni bir yöntem eklemek için DataSet Tasarım Aracı dönün, bölüme ProductsTableAdapter
sağ tıklayın ve Sorgu Ekle'yi seçin.
Şekil 14: TableAdapter'da Right-Click ve Sorgu Ekle'yi seçin
İlk olarak geçici bir SQL deyimini veya yeni veya mevcut bir saklı yordamı kullanarak veritabanına erişmek isteyip istemediğimiz sorulur. Geçici SQL deyimini yeniden kullanmayı seçelim. Ardından, ne tür BIR SQL sorgusu kullanmak istediğimiz sorulur. Belirtilen bir kategoriye ait tüm ürünleri döndürmek istediğimizden, satırları döndüren bir SELECT
deyim yazmak istiyoruz.
Şekil 15: Satır Döndüren Bir SELECT
Deyim Oluşturmayı Seçin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sonraki adım, verilere erişmek için kullanılan SQL sorgusunu tanımlamaktır. Yalnızca belirli bir kategoriye ait olan ürünleri döndürmek istediğimizden, 'den aynı SELECT
deyimi kullanıyorum ama şu WHERE
yan tümceyi ekliyorum: WHERE CategoryID = @CategoryID
.GetProducts()
@CategoryID
parametresi TableAdapter sihirbazına, oluşturduğumuz yöntemin karşılık gelen türde bir giriş parametresi (null atanabilir bir tamsayı) gerektirdiğini belirtir.
Şekil 16: Yalnızca Belirtilen Kategorideki Ürünleri Döndürmek için Bir Sorgu Girin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Son adımda kullanılacak veri erişim desenlerini seçebilir ve oluşturulan yöntemlerin adlarını özelleştirebiliriz. Dolgu deseni için datatable dönüş deseni (GetX
yöntemler) için adını FillByCategoryID
ve olarak değiştirelimGetProductsByCategoryID
.
Şekil 17: TableAdapter Yöntemlerinin Adlarını Seçin (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sihirbazı tamamladıktan sonra DataSet Tasarım Aracı yeni TableAdapter yöntemlerini içerir.
Şekil 18: Ürünler Artık Kategoriye Göre Sorgulanabilir
Aynı tekniği kullanarak bir GetProductByProductID(productID)
yöntem eklemek için biraz zaman ayırın.
Bu parametreli sorgular doğrudan DataSet Tasarım Aracı test edilebilir. TableAdapter'da yöntemine sağ tıklayın ve Verileri Önizle'yi seçin. Ardından, parametreler için kullanılacak değerleri girin ve Önizleme'ye tıklayın.
Şekil 19: İçecek Kategorisine Ait Ürünler Gösteriliyor (Tam boyutlu resmi görüntülemek için tıklayın)
GetProductsByCategoryID(categoryID)
DAL'mizdeki yöntemiyle artık yalnızca belirli bir kategorideki ürünleri görüntüleyen bir ASP.NET sayfası oluşturabiliriz. Aşağıdaki örnek, 1 içeren İçecekler kategorisindeki CategoryID
tüm ürünleri gösterir.
Beverages.aspx
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Beverages.aspx.vb"
Inherits="Beverages" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Beverages</h1>
<p>
<asp:GridView ID="GridView1" runat="server"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
Beverages.aspx.vb
Imports NorthwindTableAdapters
Partial Class Beverages
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim productsAdapter As New ProductsTableAdapter
GridView1.DataSource =
productsAdapter.GetProductsByCategoryID(1)
GridView1.DataBind()
End Sub
End Class
Şekil 20: İçecek Kategorisindeki Ürünler Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
4. Adım: Veri Ekleme, Güncelleştirme ve Silme
Veri eklemek, güncelleştirmek ve silmek için yaygın olarak kullanılan iki desen vardır. Veritabanı doğrudan desenini çağıracağım ilk desen, çağrıldığında, tek bir veritabanı kaydında çalışan veritabanına bir INSERT
, UPDATE
veya DELETE
komutu veren yöntemler oluşturmayı içerir. Bu tür yöntemler genellikle eklenecek, güncelleştirilecek veya silinecek değerlere karşılık gelen bir dizi skaler değere (tamsayılar, dizeler, Boole değerleri, DateTimes vb.) geçirilir. Örneğin, tablo için Products
bu desenle, delete yöntemi silinecek kaydın değerini belirten ProductID
bir tamsayı parametresinde yer alırken, insert yöntemi için bir dize ProductName
, için UnitPrice
bir ondalık , için bir tamsayı UnitsOnStock
vb. alır.
Şekil 21: Her Ekleme, Güncelleştirme ve Silme İsteği Veritabanına Hemen Gönderilir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Toplu güncelleştirme deseni olarak adlandıracağım diğer desen ise bir yöntem çağrısında DataSet, DataTable veya DataRows koleksiyonunun tamamını güncelleştirmektir. Bu desenle bir geliştirici DataTable'daki DataRow'ları siler, ekler ve değiştirir ve ardından bu DataRow'ları veya DataTable'ı bir güncelleştirme yöntemine geçirir. Bu yöntem daha sonra geçirilen DataRow'ları numaralandırır, değiştirilip değiştirilmediğini, eklenip eklenmediğini veya silinip silinmediğini belirler (DataRow'un RowState özellik değeri aracılığıyla) ve her kayıt için uygun veritabanı isteğini verir.
Şekil 22: Güncelleştirme Yöntemi Çağrıldığında Tüm Değişiklikler Veritabanıyla Eşitleniyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
TableAdapter varsayılan olarak toplu güncelleştirme desenini kullanır, ancak veritabanı doğrudan desenini de destekler. TableAdapter'ımızı oluştururken Gelişmiş Özellikler'den "Ekle, Güncelleştir ve Sil deyimleri oluştur" seçeneğini belirlediğimizden, ProductsTableAdapter
toplu güncelleştirme desenini uygulayan bir Update()
yöntem içerir. Özellikle, TableAdapter Türü Belirlenmiş DataSet, kesin olarak belirlenmiş bir DataTable veya bir veya daha fazla DataRow geçirilebilen bir yöntem içerir Update()
. TableAdapter'ı ilk kez oluştururken "GenerateDBDirectMethods" onay kutusunu işaretli bıraktıysanız, veritabanı doğrudan deseni , Update()
ve Delete()
yöntemleri aracılığıyla Insert()
da uygulanır.
Her iki veri değişikliği deseni de, UpdateCommand
, ve DeleteCommand
komutlarını INSERT
veritabanına vermek için TableAdapter'ın InsertCommand
, UPDATE
ve DELETE
özelliklerini kullanır. DataSet Tasarım Aracı TableAdapter'a tıklayıp Özellikler penceresi giderek , UpdateCommand
ve DeleteCommand
özelliklerini inceleyebilir ve değiştirebilirsinizInsertCommand
. (TableAdapter'ı seçtiğinizden ve nesnenin ProductsTableAdapter
Özellikler penceresi açılan listesinde seçilen nesne olduğundan emin olun.)
Şekil 23: TableAdapter, , UpdateCommand
ve DeleteCommand
Özelliklerine sahiptir InsertCommand
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu veritabanı komut özelliklerinden herhangi birini incelemek veya değiştirmek için, Sorgu Oluşturucusu'nu CommandText
ortaya çıkaracak alt özelliğe tıklayın.
Şekil 24: Sorgu Oluşturucusu'nda , UPDATE
ve DELETE
Deyimlerini yapılandırma INSERT
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Aşağıdaki kod örneği, üretimden kaldırılmayan ve stokta 25 veya daha az birim bulunan tüm ürünlerin fiyatını iki katına çıkarabilmek için toplu güncelleştirme düzeninin nasıl kullanılacağını gösterir:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
Dim products As Northwind.ProductsDataTable = productsAdapter.GetProducts()
For Each product As Northwind.ProductsRow In products
If Not product.Discontinued AndAlso product.UnitsInStock <= 25 Then
product.UnitPrice *= 2
End if
Next
productsAdapter.Update(products)
Aşağıdaki kodda, belirli bir ürünü program aracılığıyla silmek, ardından bir ürünü güncelleştirmek ve ardından yeni bir ürün eklemek için VERITABANı doğrudan düzeninin nasıl kullanılacağı gösterilmektedir:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
productsAdapter.Delete(3)
productsAdapter.Update( _
"Chai", 1, 1, "10 boxes x 20 bags", 18.0, 39, 15, 10, false, 1)
productsAdapter.Insert( _
"New Product", 1, 1, "12 tins per carton", 14.95, 15, 0, 10, false)
Özel Ekleme, Güncelleştirme ve Silme Yöntemleri Oluşturma
Insert()
Veritabanı doğrudan yöntemi tarafından oluşturulan , Update()
ve Delete()
yöntemleri, özellikle de çok sütunlu tablolar için biraz hantal olabilir. IntelliSense'in yardımı olmadan önceki kod örneğine baktığımızda, hangi tablo sütununun ve yöntemlerine her giriş parametresiyle Update()
Insert()
eşlenip eşlenmediği özellikle net Products
değildir. Yalnızca bir veya iki sütunu güncelleştirmek istediğimiz veya yeni eklenen kaydın IDENTITY
(otomatik artırma) alanının değerini döndürecek özelleştirilmiş Insert()
bir yöntem istediğimiz zamanlar olabilir.
Böyle bir özel yöntem oluşturmak için DataSet Tasarım Aracı dönün. TableAdapter'a sağ tıklayın ve TabloAdapter sihirbazına dönerek Sorgu Ekle'yi seçin. İkinci ekranda oluşturulacak sorgu türünü gösterebiliriz. Şimdi yeni bir ürün ekleyen ve ardından yeni eklenen kaydın ProductID
değerini döndüren bir yöntem oluşturalım. Bu nedenle, bir INSERT
sorgu oluşturmayı tercih edin.
Şekil 25: Tabloya Yeni Satır Products
Ekleme Yöntemi Oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bir sonraki ekranda 'CommandText
ler InsertCommand
görüntülenir. Sorgunun sonuna ekleyerek SELECT SCOPE_IDENTITY()
bu sorguyu genişleterek aynı kapsamdaki bir IDENTITY
sütuna eklenen son kimlik değerini döndürür. (@@IDENTITY SCOPE_IDENTITY() kullanmak isteme nedenleriniz hakkında SCOPE_IDENTITY()
daha fazla bilgi için teknik belgelere bakın.) deyimini eklemeden önce deyimini INSERT
noktalı virgülle sonlandırdığınızdan SELECT
emin olun.
Şekil 26: Değeri Döndürmek için Sorguyu SCOPE_IDENTITY()
Artırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Son olarak, yeni yöntemi InsertProduct
olarak adlandırın.
Şekil 27: Yeni Yöntem Adı'nı olarak InsertProduct
ayarlayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)
DataSet Tasarım Aracı döndüğünüzde, içinde ProductsTableAdapter
yeni bir yöntem InsertProduct
olduğunu görürsünüz. Bu yeni yöntemin tablodaki Products
her sütun için bir parametresi yoksa, deyimi noktalı virgülle sonlandırmayı INSERT
unutmuş olma olasılığınız yüksektir. InsertProduct
yöntemini yapılandırın ve ve SELECT
deyimlerini sınırlandıran noktalı virgüle sahip olduğunuzdan INSERT
emin olun.
Varsayılan olarak, ekleme yöntemleri sorgu dışı yöntemler verir, yani etkilenen satır sayısını döndürürler. Ancak yönteminin InsertProduct
etkilenen satır sayısını değil sorgu tarafından döndürülen değeri döndürmesini istiyoruz. Bunu gerçekleştirmek için yönteminin InsertProduct
ExecuteMode
özelliğini olarak Scalar
ayarlayın.
Şekil 28: Özelliği Scalar
olarak değiştirme ExecuteMode
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Aşağıdaki kod, bu yeni InsertProduct
yöntemin nasıl çalıştığını gösterir:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
Dim new_productID As Integer = Convert.ToInt32(productsAdapter.InsertProduct( _
"New Product", 1, 1, "12 tins per carton", 14.95, 10, 0, 10, false))
productsAdapter.Delete(new_productID)
5. Adım: Veri Erişim Katmanını Tamamlama
sınıfının tablodan ve değerlerini döndürdüğünüProductsTableAdapters
, ancak tablodaki CategoryName
sütunu veya CompanyName
tablodaki Categories
sütunu Suppliers
içermediğini unutmayın; ancak bunlar büyük olasılıkla ürün bilgilerini gösterirken görüntülemek istediğimiz sütunlardır.Products
SupplierID
CategoryID
TableAdapter'ın ilk yöntemi GetProducts()
olan öğesini hem hem CompanyName
de CategoryName
sütun değerlerini içerecek şekilde genişletebiliriz. Bu, kesin olarak türü belirlenmiş DataTable'ı da bu yeni sütunları içerecek şekilde güncelleştirir.
Ancak TableAdapter'ın veri ekleme, güncelleştirme ve silme yöntemleri bu ilk yöntemi temel alarak bir sorun oluşturabilir. Neyse ki, ekleme, güncelleştirme ve silme için otomatik olarak oluşturulan yöntemler yan tümcesindeki SELECT
alt sorgulardan etkilenmez. Sorgularımızı alt sorgular Categories
Suppliers
olarak eklemek yerine JOIN
alt sorgular olarak eklemeye dikkat ederek, verileri değiştirmek için bu yöntemleri yeniden çalışmaktan kaçınacağız. içinde yöntemine GetProducts()
sağ tıklayın ve Yapılandır'ı ProductsTableAdapter
seçin. Ardından yan tümcesini SELECT
aşağıdaki gibi görünecek şekilde ayarlayın:
SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
(SELECT CategoryName FROM Categories
WHERE Categories.CategoryID = Products.CategoryID) as CategoryName,
(SELECT CompanyName FROM Suppliers
WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName
FROM Products
Şekil 29: Yöntemin Deyimini SELECT
GetProducts()
Güncelleştirme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Yöntemi bu yeni sorguyu GetProducts()
kullanacak şekilde güncelleştirdikten sonra DataTable iki yeni sütun içerir: CategoryName
ve SupplierName
.
Şekil 30: DataTable'da Products
İki Yeni Sütun Var
Bir dakika ayırarak yöntemindeki SELECT
yan tümcesini de güncelleştirin GetProductsByCategoryID(categoryID)
.
Söz dizimini GetProducts()
SELECT
kullanarak JOIN
öğesini güncelleştirirseniz DataSet Tasarım Aracı veritabanı verilerini ekleme, güncelleştirme ve silme yöntemlerini veritabanı doğrudan desenini kullanarak otomatik olarak oluşturamaz. Bunun yerine, bunları bu öğreticinin önceki bölümlerindeki yöntemiyle yaptığımız gibi el ile InsertProduct
oluşturmanız gerekir. Ayrıca, toplu güncelleştirme desenini InsertCommand
kullanmak istiyorsanız , UpdateCommand
ve DeleteCommand
özellik değerlerini el ile sağlamanız gerekir.
Kalan TableAdaplayıcıları Ekleme
Şimdiye kadar tek bir veritabanı tablosu için yalnızca tek bir TableAdapter ile çalışmayı inceledik. Ancak Northwind veritabanı, web uygulamamızda birlikte çalışmamız gereken birkaç ilişkili tablo içerir. Yazılan Veri Kümesi birden çok ilgili DataTable içerebilir. Bu nedenle DAL'mizi tamamlamak için bu öğreticilerde kullanacağımız diğer tablolar için DataTable'lar eklemeliyiz. Türü Belirlenmiş Bir DataSet'e yeni bir TableAdapter eklemek için DataSet Tasarım Aracı açın, Tasarım Aracı sağ tıklayın ve Ekle / TabloAdapter'ı seçin. Bu, yeni bir DataTable ve TableAdapter oluşturur ve bu öğreticinin önceki bölümlerinde incelediğimiz sihirbazda size yol gösterir.
Aşağıdaki sorguları kullanarak aşağıdaki TableAdapters ve yöntemlerini oluşturmak birkaç dakika sürer. içindeki ProductsTableAdapter
sorguların, her ürünün kategorisini ve sağlayıcı adlarını almak için alt sorguları içerdiğini unutmayın. Ayrıca, takip ediyorsanız sınıfın ProductsTableAdapter
GetProducts()
ve GetProductsByCategoryID(categoryID)
yöntemlerini zaten eklemişsinizdir.
ProductsTableAdapter
GetProducts:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products
GetProductsByCategoryID:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products WHERE CategoryID = @CategoryID
GetProductsBySupplierID:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products WHERE SupplierID = @SupplierID
GetProductByProductID:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products WHERE ProductID = @ProductID
CategoriesTableAdapter
GetCategories:
SELECT CategoryID, CategoryName, Description FROM Categories
GetCategoryByCategoryID:
SELECT CategoryID, CategoryName, Description FROM Categories WHERE CategoryID = @CategoryID
SuppliersTableAdapter
GetSuppliers:
SELECT SupplierID, CompanyName, Address, City, Country, Phone FROM Suppliers
GetSuppliersByCountry:
SELECT SupplierID, CompanyName, Address, City, Country, Phone FROM Suppliers WHERE Country = @Country
GetSupplierBySupplierID:
SELECT SupplierID, CompanyName, Address, City, Country, Phone FROM Suppliers WHERE SupplierID = @SupplierID
EmployeesTableAdapter
GetEmployees:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees
GetEmployeesByManager:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees WHERE ReportsTo = @ManagerID
GetEmployeeByEmployeeID:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees WHERE EmployeeID = @EmployeeID
Şekil 31: Dört TableAdapters Eklendikten Sonra DataSet Tasarım Aracı (Tam boyutlu görüntüyü görüntülemek için tıklayın)
DAL'ye Özel Kod Ekleme
Typed DataSet'e eklenen TableAdapters ve DataTable'lar bir XML Şema Tanımı dosyası ()Northwind.xsd
olarak ifade edilir. Çözüm Gezgini dosyaya Northwind.xsd
sağ tıklayıp Kodu Görüntüle'yi seçerek bu şema bilgilerini görüntüleyebilirsiniz.
Şekil 32: Northwinds Yazılan Veri Kümesi için XML Şema Tanımı (XSD) Dosyası (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu şema bilgileri, derlendiğinde veya çalışma zamanında (gerekirse) tasarım zamanında C# veya Visual Basic koduna çevrilir ve bu noktada hata ayıklayıcı ile adım adım ilerleyebilirsiniz. Otomatik olarak oluşturulan bu kodu görüntülemek için Sınıf Görünümü'ne gidin ve TableAdapter veya Typed DataSet sınıflarına gidin. Ekranınızda Sınıf Görünümü'nü görmüyorsanız, Görünüm menüsüne gidin ve buradan seçin veya Ctrl+Shift+C tuşlarına basın. Sınıf Görünümü'nden Typed DataSet ve TableAdapter sınıflarının özelliklerini, yöntemlerini ve olaylarını görebilirsiniz. Belirli bir yöntemin kodunu görüntülemek için Sınıf Görünümü'nde yöntem adına çift tıklayın veya sağ tıklayıp Tanıma Git'i seçin.
Şekil 33: Sınıf Görünümünden Tanıma Git'i seçerek Otomatik Oluşturulan Kodu İnceleme
Otomatik olarak oluşturulan kod harika bir zaman tasarrufu sağlayabilir ancak genellikle çok geneldir ve bir uygulamanın benzersiz gereksinimlerini karşılamak için özelleştirilmesi gerekir. Ancak otomatik olarak oluşturulan kodu genişletme riski, kodu oluşturan aracın özelleştirmelerinizi "yeniden oluşturma" ve üzerine yazma zamanına karar vermesine neden olabilir. .NET 2.0'ın yeni kısmi sınıf kavramıyla, bir sınıfı birden çok dosyaya bölmek kolaydır. Bu, Visual Studio'yu özelleştirmelerimizin üzerine yazma konusunda endişelenmenize gerek kalmadan otomatik olarak oluşturulan sınıflara kendi yöntemlerimizi, özelliklerimizi ve olaylarımızı eklememizi sağlar.
DAL'yi özelleştirmeyi göstermek için sınıfına SuppliersRow
bir GetProducts()
yöntem ekleyelim. SuppliersRow
sınıfı tablodaki Suppliers
tek bir kaydı temsil eder; her sağlayıcı birçok ürüne sıfır sağlayabilir, bu nedenle GetProducts()
belirtilen sağlayıcının bu ürünlerini döndürür. Bunu yapmak için adlı SuppliersRow.vb
klasörde yeni bir sınıf dosyası App_Code
oluşturun ve aşağıdaki kodu ekleyin:
Imports NorthwindTableAdapters
Partial Public Class Northwind
Partial Public Class SuppliersRow
Public Function GetProducts() As Northwind.ProductsDataTable
Dim productsAdapter As New ProductsTableAdapter
Return productsAdapter.GetProductsBySupplierID(Me.SupplierID)
End Function
End Class
End Class
Bu kısmi sınıf derleyiciye sınıfı oluştururken Northwind.SuppliersRow
az önce tanımladığımız yöntemi içermesini GetProducts()
bildirir. Projenizi derleyip Sınıf Görünümü'ne dönerseniz artık yöntemi Northwind.SuppliersRow
olarak listelendiğini görürsünüzGetProducts()
.
Şekil 34: GetProducts()
Yöntem Artık Sınıfın Northwind.SuppliersRow
Bir Parçasıdır
Yöntemi GetProducts()
artık aşağıdaki kodda gösterildiği gibi belirli bir sağlayıcının ürün kümesini listelemek için kullanılabilir:
Dim suppliersAdapter As New NorthwindTableAdapters.SuppliersTableAdapter()
Dim suppliers As Northwind.SuppliersDataTable = suppliersAdapter.GetSuppliers()
For Each supplier As Northwind.SuppliersRow In suppliers
Response.Write("Supplier: " & supplier.CompanyName)
Response.Write("<ul>")
Dim products As Northwind.ProductsDataTable = supplier.GetProducts()
For Each product As Northwind.ProductsRow In products
Response.Write("<li>" & product.ProductName & "</li>")
Next
Response.Write("</ul><p> </p>")
Next
Bu veriler herhangi bir ASP'de de görüntülenebilir. NET'in veri Web denetimleri. Aşağıdaki sayfada iki alan içeren bir GridView denetimi kullanılır:
- Her sağlayıcının adını görüntüleyen bir BoundField ve
- Her sağlayıcı için yöntemi tarafından
GetProducts()
döndürülen sonuçlara bağlı bir BulletedList denetimi içeren TemplateField.
Gelecek öğreticilerde bu tür ana ayrıntı raporlarının nasıl görüntüleneceğini inceleyeceğiz. Şimdilik, bu örnek sınıfa eklenen özel yöntemi kullanarak göstermek üzere Northwind.SuppliersRow
tasarlanmıştır.
SuppliersAndProducts.aspx
<%@ Page Language="VB" CodeFile="SuppliersAndProducts.aspx.vb"
AutoEventWireup="true" Inherits="SuppliersAndProducts" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>
Suppliers and Their Products</h1>
<p>
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<Columns>
<asp:BoundField DataField="CompanyName"
HeaderText="Supplier" />
<asp:TemplateField HeaderText="Products">
<ItemTemplate>
<asp:BulletedList ID="BulletedList1"
runat="server" DataSource="<%# CType(CType(Container.DataItem, System.Data.DataRowView).Row, Northwind.SuppliersRow).GetProducts() %>"
DataTextField="ProductName">
</asp:BulletedList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
SuppliersAndProducts.aspx.vb
Imports NorthwindTableAdapters
Partial Class SuppliersAndProducts
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim suppliersAdapter As New SuppliersTableAdapter
GridView1.DataSource = suppliersAdapter.GetSuppliers()
GridView1.DataBind()
End Sub
End Class
Şekil 35: Sağlayıcının Şirket Adı Sol Sütunda, Ürünleri Sağda Listelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
Bir web uygulaması oluştururken DAL,sunu katmanınızı oluşturmaya başlamadan önce ilk adımlarınızdan biri olmalıdır. Visual Studio ile, Yazılan Veri Kümelerini temel alan bir DAL oluşturmak, bir kod satırı yazmadan 10-15 dakika içinde gerçekleştirilebilecek bir görevdir. Bu DAL'nin üzerine ilerleyen öğreticiler eklenecektir. Sonraki öğreticide bir dizi iş kuralı tanımlayacak ve bunları ayrı bir İş Mantığı Katmanında nasıl uygulayacağımızı göreceğiz.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- VS 2005 ve ASP.NET 2.0'da Kesin Türe Sahip TableAdapers ve DataTable'lar kullanarak DAL oluşturma
- Veri Katmanı Bileşenleri Tasarlama ve Verileri KatmanlarDan Geçirme
- ASP.NET 2.0 Uygulamalarında Yapılandırma Bilgilerini Şifreleme
- TableAdapter'a Genel Bakış
- Yazılan Bir DataSet ile Çalışma
- Visual Studio 2005 ve ASP.NET 2.0'da Strongly-Typed Veri Erişimini Kullanma
- TableAdapter Yöntemlerini Genişletme
Bu Öğreticide Yer Alan Konularda Video Eğitimi
- ASP.NET Uygulamalarında Veri Erişim Katmanları
- Veri Kümesini Datagrid'e El ile Bağlama
- ASP Uygulamasından Veri Kümeleri ve Filtrelerle Çalışma
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 Hours 2.0'dır. 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 Ron Green, Hilton Giesenow, Dennis Patterson, Liz Shulok, Abel Gomez ve Carlos Santos oldu. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana adresinden 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