Veri Erişim Katmanını Oluşturma (VB)

Scott Mitchell tarafından

Örnek uygulamayı indirin veya PDF 'yi indirin

Bu öğreticide, bir veritabanındaki bilgilere erişmek için çok baştan başlayıp, yazılan veri kümelerini kullanarak veri erişim katmanını (DAL) oluşturacağız.

Giriş

Web geliştiricileri olarak, yaşamımız verilerle çalışmaya yakın bir şekilde çalışır. Verileri depolamak için veritabanları, bu dosyayı alma ve değiştirme kodu ve toplanacak ve özetlenecek Web sayfaları oluşturacağız. Bu, ASP.NET 2,0 ' de bu ortak desenleri uygulama tekniklerini keşfedebilir, uzun bir serinin ilk öğreticisidir. Yazılan veri kümelerini kullanarak bir veri erişim katmanından (DAL) oluşan bir yazılım mimarisi , özel iş kurallarını zorlayan bir Iş mantığı katmanı (BLL) ve ortak bir sayfa düzeni paylaşan ASP.net sayfalarından oluşan bir sunum katmanı oluşturmaya başlayacağız. Bu arka uç groundçalışma oluşturulduktan sonra, bir Web uygulamasındaki verileri görüntüleme, özetleme, toplama ve doğrulama işlemlerinin nasıl yapılacağını gösteren raporlamaya geçeceğiz. Bu öğreticilerin kısa olması ve işlem boyunca görsel olarak size yol göstermek için çok sayıda ekran görüntüsü ile adım adım yönergeler sağlaması gerekir. Her öğretici, C# ve Visual Basic sürümlerde mevcuttur ve kullanılan kodun tamamını karşıdan yükleme içerir. (Bu ilk öğretici oldukça uzun, ancak Rest çok daha fazla digestible öbekte sunulmuştur.)

Bu öğreticiler için App_Data dizinine yerleştirilmiş Northwind veritabanının Microsoft SQL Server 2005 Express Edition sürümünü kullanacağız. Veritabanı dosyasına ek olarak, App_Data klasörü, farklı bir veritabanı sürümü kullanmak istemeniz durumunda veritabanını oluşturmak için SQL komut dosyalarını da içerir. Bu betikler, tercih ediyorsanız doğrudan Microsoft 'tan da indirilebilir. Northwind veritabanının farklı bir SQL Server sürümünü kullanırsanız, uygulamanın Web.config dosyasında NORTHWNDConnectionString ayarını güncelleştirmeniz gerekir. Web uygulaması, dosya sistemi tabanlı bir Web sitesi projesi olarak Visual Studio 2005 Professional Edition kullanılarak oluşturulmuştur. Ancak, tüm öğreticiler Visual Studio 2005, Visual Web Developer'ın ücretsiz sürümüyle eşit bir şekilde çalışacaktır.

Bu öğreticide, en baştan başlayacağız ve veri erişim katmanını (DAL) oluşturacak ve ikinci öğreticide Iş mantığı katmanını (BLL) oluşturarak ve sayfa düzeninde ve üçüncü katmandaki gezinmede çalışmaya başlayacağız. Üçüncü bir sürüm ile sonraki öğreticiler, birinci üçünde yer alan temel üzerinde oluşturulur. Bu ilk öğreticide yer almak için çok fazla sunuyoruz ve Visual Studio 'Yu kullanmaya başlayın!

1. Adım: Web projesi oluşturma ve veritabanına bağlanma

Veri erişim katmanımızı (DAL) oluşturabilmeniz için önce bir Web sitesi oluşturmanız ve veritabanınızı ayarlamanız gerekir. Yeni bir dosya sistemi tabanlı ASP.NET Web sitesi oluşturarak başlayın. Bunu gerçekleştirmek için Dosya menüsüne gidin ve yeni Web sitesi ' ni seçerek yeni Web sitesi iletişim kutusunu görüntüler. ASP.NET Web sitesi şablonunu seçin, Konum açılır listesini dosya sistemi olarak ayarlayın, Web sitesini yerleştirmek için bir klasör seçin ve dili Visual Basic olarak ayarlayın.

yeni bir dosya sistemi tabanlı Web sitesi oluşturma

Şekil 1: yeni bir dosya sistemi tabanlı Web sitesi oluşturma (tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu, bir Default.aspx ASP.NET sayfası, bir App_Data klasörü ve bir Web.config dosyası ile yeni bir Web sitesi oluşturur.

Web sitesi oluşturulduğunda, sonraki adım Visual Studio 'nun Sunucu Gezgini veritabanına bir başvuru eklemektir. Sunucu Gezgini bir veritabanı ekleyerek, Visual Studio içinden tabloları, saklı yordamları, görünümleri ve benzeri işlemleri ekleyebilirsiniz. Ayrıca, Sorgu Tasarımcısı aracılığıyla tablo verilerini görüntüleyebilir veya kendi sorgularınızı oluşturabilirsiniz. Ayrıca, DAL için yazılan veri kümelerini oluşturduğumuz zaman, Visual Studio 'Nun yazılan veri kümelerinin oluşturulması gereken veritabanına işaret etmesi gerekir. Bu bağlantı bilgilerini zaman içinde sağlayabilmemiz için, Visual Studio Sunucu Gezgini zaten kayıtlı olan veritabanlarının açılan listesini otomatik olarak doldurur.

Sunucu Gezgini Northwind veritabanını ekleme adımları App_Data klasöründe SQL Server 2005 Express Sürüm veritabanını kullanmak istediğinize veya bunun yerine kullanmak istediğiniz Microsoft SQL Server 2000 ya da 2005 veritabanı sunucu kurulumuna sahip olup olmadığına bağlıdır.

App_Dataklasöründeki bir veritabanını kullanma

Bağlanmak için bir SQL Server 2000 veya 2005 veritabanı sunucusu yoksa veya veritabanını bir veritabanı sunucusuna ekleme zorunluluğunu önlemek istiyorsanı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.

App_Data klasöre yerleştirilmiş bir veritabanı Sunucu Gezgini otomatik olarak eklenir. Makinenizde SQL Server 2005 Express Sürüm yüklü olduğunu varsayarsak, kuzeydoğu adlı bir düğüm görmeniz gerekir. Sunucu Gezgini, tabloları, görünümleri, saklı yordamını ve benzerlerini genişletebileceğiniz ve keşfedebilir (bkz. Şekil 2).

App_Data klasörü, Microsoft Access .mdb dosyalarını da tutabilir ve bu da SQL Server karşılıkları gibi Sunucu Gezgini otomatik olarak eklenir. SQL Server seçeneklerden herhangi birini kullanmak istemiyorsanız, Northwind veritabanı dosyasının Microsoft Access sürümünü her zaman indirebilir ve App_Data dizinine bırakabilirsiniz. Ancak, Access veritabanlarının SQL Server olarak Özellik zengin olmadığı ve Web sitesi senaryolarında kullanılmak üzere tasarlanmadığı göz önünde bulundurun. Ayrıca, 35 ' in birkaç öğreticimiz, erişim tarafından desteklenmeyen belirli veritabanı düzeyi özellikleri kullanır.

Microsoft SQL Server 2000 veya 2005 veritabanı sunucusunda veritabanına bağlanma

Alternatif olarak, bir veritabanı sunucusunda yüklü olan Northwind veritabanına bağlanabilirsiniz. Veritabanı sunucusunda zaten Northwind veritabanı yüklü değilse, önce Bu öğreticinin indirileceği yükleme betiğini çalıştırarak veya Northwind ve Installation script SQL Server 2000 sürümünü doğrudan Microsoft 'un web sitesinden indirerek veritabanı sunucusuna eklemeniz gerekir.

Veritabanını yükledikten sonra, Visual Studio 'daki Sunucu Gezgini gidin, veri bağlantıları düğümüne sağ tıklayın ve bağlantı Ekle ' yi seçin. Sunucu Gezgini görmüyorsanız, görünüme/Sunucu Gezgini gidin veya CTRL + ALT + S tuşlarına basın. Bu işlem, bağlanılacak sunucuyu, kimlik doğrulama bilgilerini ve veritabanı adını belirtebileceğiniz bağlantı Ekle iletişim kutusunu getirir. Veritabanı bağlantı bilgilerini başarıyla yapılandırdıktan ve Tamam düğmesine tıkladıktan sonra, veritabanı veri bağlantıları düğümünün altına bir düğüm olarak eklenecektir. Tabloları, görünümleri, saklı yordamlarını ve benzerlerini araştırmak için veritabanı düğümünü genişletebilirsiniz.

Veritabanı sunucunuzun Northwind veritabanına bir bağlantı ekleyin

Şekil 2: veritabanı sunucunuzun Northwind veritabanına bağlantı ekleme

2. Adım: veri erişim katmanını oluşturma

Verilerle çalışırken, verilere özgü mantığı doğrudan sunu katmanına (bir Web uygulamasında, ASP.NET sayfaları ise sunu katmanını yapar) katıştırmanız gerekir. Bu, ASP.NET sayfasının kod bölümünde ADO.NET kodu yazma veya biçimlendirme bölümünün SqlDataSource denetimini kullanma biçimini alabilir. Her iki durumda da bu yaklaşım, veri erişim mantığını sunum katmanıyla sıkı bir şekilde bağar. Ancak önerilen yaklaşım, veri erişim mantığını sunum katmanından ayıramaktır. Bu ayrı katmana veri erişim katmanı, kısa için DAL adı verilir 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 gerçekleştirilecek yaklaşım vardır.

Veritabanına bağlantı oluşturma, SELECT, INSERT, UPDATEve DELETE komutları gibi temel alınan veri kaynağına özgü tüm kod ve bu nedenle, DAL içinde bulunmalıdır. Sunu katmanı, bu tür veri erişim koduna herhangi bir başvuru içermemelidir, ancak bunun yerine her türlü veri isteği için DAL çağrısı yapmamalıdır. Veri erişimi katmanları genellikle temel alınan veritabanı verilerine erişim yöntemlerini içerir. Örneğin, Northwind veritabanının, satışı için ürünleri ve ait oldukları kategorileri kaydeden Products ve Categories tabloları vardır. Bu şekilde, şu gibi yöntemlere sahip olduğumuz:

  • Tüm Kategoriler hakkındaki bilgileri döndüren GetCategories(),
  • Tüm ürünlerle ilgili bilgileri döndüren GetProducts()
  • GetProductsByCategoryID(categoryID), belirtilen kategoriye ait tüm ürünleri döndürecek
  • belirli bir ürünle ilgili bilgileri döndüren GetProductByProductID(productID)

Çağrıldığında, bu yöntemler veritabanına bağlanır, uygun sorguyu verir ve sonuçları döndürür. Bu sonuçların nasıl döndürültiğimiz önemlidir. Bu yöntemler veritabanı sorgusu tarafından doldurulan bir veri kümesi veya DataReader döndürebilir, ancak ideal olarak belirlenmiş nesnelerkullanılarak bu sonuçların döndürülmesi önerilir. Türü kesin belirlenmiş bir nesne, derleme zamanında rigidly tanımlanmış olan bir nesnedir, ancak gevşek olarak yazılmış bir nesne, bir şema çalışma zamanına kadar bilinmez.

Örneğin, DataReader ve veri kümesi (varsayılan olarak), şemaları doldurmak için kullanılan veritabanı sorgusunun döndürdüğü sütunlar tarafından tanımlandığından, gevşek olarak yazılmış nesnelerdir. Gevşek yazılmış bir DataTable nesnesinden belirli bir sütuna erişmek için, şöyle bir sözdizimi kullanmanız gerekir: DataTable.Rows(index)("columnName"). DataTable 'ın bu örnekteki gevşek olarak yazılması, bir dize veya sıralı dizin kullanarak sütun adına erişmesi gereken olgu tarafından belirlenir. Kesin türü belirtilmiş bir DataTable, diğer taraftan, sütunlarının her birini özellik olarak uygulanmış olacaktır, bu, şunun gibi görünen kod ile sonuçlanır: DataTable.Rows(index).columnName.

Kesin tür belirtilmiş nesneleri döndürmek için, geliştiriciler kendi özel iş nesnelerini oluşturabilir ya da türü belirlenmiş veri kümelerini 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ü belirtilmiş veri kümesi, Visual Studio tarafından bir veritabanı şemasına göre oluşturulan ve üyeleri bu şemaya göre kesin olarak yazılan bir sınıftır. Türü belirtilmiş veri kümesi, ADO.NET DataSet, DataTable ve DataRow sınıflarını genişleten sınıflardan oluşur. Türü kesin belirlenmiş DataTable 'a ek olarak, yazılan veri kümeleri artık DataSet 'in DataTable 'ları dolduruluyor ve DataTable içindeki değişiklikleri veritabanına geri yaymaya yönelik yöntemlere sahip olan TableAdapters de içerir.

Note

Türü belirtilmiş veri kümeleri ve özel iş nesneleri kullanmanın avantajları ve dezavantajları hakkında daha fazla bilgi için, veri katmanı bileşenleri tasarlama ve katmanlar aracılığıyla veri geçirmekonusuna bakın.

Bu öğreticiler mimarisi için kesin türü belirtilmiş veri kümeleri kullanacağız. Şekil 3 ' te, yazılan veri kümelerini kullanan bir uygulamanın farklı katmanları arasındaki iş akışı gösterilmektedir.

tüm veri erişim kodu DAL için yeniden dağıtılır

Şekil 3: tüm veri ERIŞIM kodu dal için yeniden dağıtılır (tam boyutlu görüntüyü görüntülemek için tıklayın)

Türü belirtilmiş veri kümesi ve tablo bağdaştırıcısı oluşturma

DAL oluşturmaya başlamak için, projemizi belirlenmiş bir veri kümesi ekleyerek başladık. Bunu gerçekleştirmek için Çözüm Gezgini proje düğümüne sağ tıklayın ve yeni öğe Ekle ' yi seçin. Şablon listesinden veri kümesi seçeneğini belirleyin ve Northwind.xsdadlandırın.

projenize yeni bir veri kümesi eklemeyi seçin

Şekil 4: projenize yeni bir 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, veri kümesini App_Code klasörüne eklemek isteyip istemediğiniz sorulduğunda Evet ' i seçin. Daha sonra, yazılan veri kümesine ilişkin tasarımcı görüntülenir ve TableAdapter Yapılandırma Sihirbazı başlatılır ve bu işlem, türü belirtilmiş veri kümesine ilk TableAdapter eklemenizi sağlar.

Türü belirtilmiş veri kümesi, kesin türü belirtilmiş bir veri koleksiyonu işlevi görür. her biri türü kesin belirlenmiş DataRow örneklerinden oluşan kesin türü belirtilmiş DataTable örneklerinden oluşur. Bu öğreticiler serisinde birlikte çalışması gereken temel alınan veritabanı tablolarının her biri için kesin olarak yazılmış bir DataTable oluşturacağız. Products tablosu için bir DataTable oluşturmaya başlayalım.

Türü kesin belirlenmiş DataTable 'ın, temel alınan veritabanı tablosundan verilere erişme hakkında herhangi bir bilgi içermediği göz önünde bulundurun. 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. Products DataTable 'imiz için TableAdapter, sunum katmanından çağıracağımız yöntemleri GetProducts(), GetProductByCategoryID(categoryID)vb. içerir. DataTable 'ın rolü, katmanlar arasında veri geçirmek için kullanılan türü kesin belirlenmiş nesneler olarak kullanılır.

TableAdapter Yapılandırma Sihirbazı, hangi veritabanının birlikte çalışabileceği seçmenizi isteyerek başlar. Açılan listede bu veritabanları Sunucu Gezgini gösterilmektedir. Northwind veritabanını Sunucu Gezgini eklememediyseniz, şu anda yeni bağlantı düğmesine tıklayabilirsiniz.

, açılan listeden Northwind veritabanını seçin

Şekil 5: açılan listeden Northwind veritabanını seçin (tam boyutlu görüntüyü görüntülemek için tıklayın)

Veritabanını seçip Ileri ' ye tıkladıktan sonra, Web.config dosyasına bağlantı dizesini kaydetmek isteyip istemediğiniz sorulur. Bağlantı dizesini kaydederek, daha sonra bağlantı dizesi bilgileri değişirse, TableAdapter sınıflarında sabit kodlanmış olmasını önleyin. Bağlantı dizesini yapılandırma dosyasına kaydetmeyi tercih ederseniz, daha sonra geliştirilmiş güvenlik için şifrelenen veya daha sonra IIS GUI yönetici aracı içindeki yeni ASP.NET 2,0 özellik sayfasından, daha sonra Yöneticiler için ideal olan <connectionStrings> bölümüne yerleştirilir.

bağlantı dizesini Web. config dosyasına kaydet

Ş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 belirlenmiş ilk DataTable için şemayı tanımlamanız ve TableAdapter 'ızın kesin türü belirtilmiş veri kümesini doldururken kullanacağı ilk yöntemi sağlaması gerekir. Bu iki adım aynı anda DataTable 'umuza yansıtıldığımız tablodaki sütunları döndüren bir sorgu oluşturularak gerçekleştirilir. Sihirbazın sonunda bu sorguya bir yöntem adı vereceğiz. Bu yöntem alındıktan sonra sunum katmanınızdan çağrılabilir. Yöntemi, tanımlı sorguyu yürütür ve türü kesin belirlenmiş bir DataTable olarak doldurur.

SQL sorgusunu tanımlamaya başlamak için önce TableAdapter 'ın sorguyu nasıl vermesini istediğinizi belirtmemiz gerekir. Geçici bir SQL ifadesini kullanabilir, yeni bir saklı yordam oluşturabilir veya var olan bir saklı yordamı kullanabilirsiniz. Bu öğreticiler için geçici SQL deyimlerini kullanacağız. Bkz. Brian Noyes'in makalesi, saklı yordamları kullanma örneği Için Visual Studio 2005 veri kümesi Tasarımcısı Ile veri erişim katmanı oluşturma .

geçici bir SQL Ifadesini kullanarak verileri sorgulama

Şekil 7: GEÇICI bir SQL Ifadesini kullanarak verileri sorgulama (tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu noktada, SQL sorgusunu el ile yazabilirsiniz. TableAdapter içinde ilk yöntemi oluştururken, genellikle sorgunun karşılık gelen DataTable 'da ifade edilmesi gereken sütunları döndürmesini istersiniz. Products tablosundan tüm sütunları ve tüm satırları döndüren bir sorgu oluşturarak bunu gerçekleştirebiliriz:

metin kutusuna SQL sorgusunu girin

Şekil 8: metın kutusuna SQL sorgusunu 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 Tasarımcısı kullanın ve sorguyu grafik olarak oluşturun.

sorgu Düzenleyicisi aracılığıyla sorguyu grafik olarak oluşturma

Şekil 9: sorgu Düzenleyicisi aracılığıyla sorgu grafiksel olarak oluşturma (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sorguyu oluşturduktan sonra, bir sonraki ekrana geçmeden önce Gelişmiş Seçenekler düğmesine tıklayın. Web sitesi projelerinde, "INSERT, Update ve delete deyimlerini oluştur" seçeneği varsayılan olarak seçilen tek gelişmiş seçenektir; Bu Sihirbazı bir sınıf kitaplığından veya bir Windows projesinden çalıştırırsanız, "iyimser eşzamanlılık kullan" seçeneği de işaretlenir. Şimdilik "iyimser eşzamanlılık kullan" seçeneğini işaretsiz bırakın. Gelecekteki öğreticilerde iyimser eşzamanlılık inceleyeceğiz.

yalnızca INSERT, Update ve delete deyimlerini oluştur seçeneğini belirleyin

Şekil 10: yalnızca INSERT, Update ve delete deyimlerini 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 ilerlemek için Ileri ' ye tıklayın. Buraya, TableAdapter 'a eklenecek yöntemleri seçmemiz istenir. Veri doldurulmaya yönelik iki desen vardır:

  • DataTable 'ı bu yaklaşım ile doldur bir yöntem, bir DataTable içinde parametre olarak alan ve sorgunun sonuçlarına göre doldurulur. Örneğin, ADO.NET DataAdapter sınıfı, bu kalıbı Fill() yöntemiyle uygular.
  • Bu yaklaşımla bir DataTable döndürün yöntemi, DataTable 'ı sizin için oluşturur ve doldurur ve yöntem dönüş değeri olarak döndürür.

TableAdapter 'ın Bu desenlerden birini veya her ikisini birden uygulayabilmeniz gerekir. Burada sunulan yöntemleri de yeniden adlandırabilirsiniz. Her iki onay kutusu da yalnızca bu öğreticiler boyunca yalnızca ikinci kalıbı kullanacağız. Ayrıca, GetProductsiçin bunun yerine bu genel GetData yöntemini yeniden adlandıralım.

İşaretliyse, son onay kutusu "GenerateDBDirectMethods", TableAdapter için Insert(), Update()ve Delete() yöntemleri oluşturur. Bu seçeneği işaretlenmemiş olarak bırakırsanız, tüm güncelleştirmelerin, türü belirtilmiş veri kümesini, bir DataTable 'ı, tek bir DataRow 'ı veya bir DataRow dizisini alan TableAdapter 'ın tek Update() yöntemi aracılığıyla yapılması gerekir. (Şekil 9 ' da Gelişmiş özelliklerde "INSERT, Update ve delete deyimlerini üret" seçeneğini işaretlemezseniz, bu onay kutusunun ayarı hiçbir etkiye sahip olmayacaktır.) Bu onay kutusunu seçili bırakalım.

yöntem adını GetData öğesinden GetProducts olarak değiştirin

Şekil 11: yöntem adını GetData GetProducts olarak değiştirin (tam boyutlu görüntüyü görüntülemek için tıklayın)

Son ' a tıklayarak Sihirbazı doldurun. Sihirbaz kapandıktan sonra, yeni oluşturduğumuz DataTable 'ı gösteren veri kümesi tasarımcısına döndürülür. Products DataTable (ProductID, ProductName, vb.) ve ProductsTableAdapter Yöntemleri (Fill() ve GetProducts()) için sütun listesini görebilirsiniz.

DataTable ve ProductsTableAdapter ürünlerini yazılan veri kümesine eklenmiştir

Şekil 12: Products DataTable ve ProductsTableAdapter türü belirtilmiş veri kümesine eklenmiştir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu noktada, bir GetProducts() yöntemiyle tek bir DataTable (Northwind.Products) ve kesin türü belirtilmiş bir DataAdapter sınıfı (NorthwindTableAdapters.ProductsTableAdapter) içeren bir veri kümesi vardır. Bu nesneler, aşağıdaki koddan 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, bir bit veri erişimine özgü kod yazmamızı gerektirmez. Herhangi bir ADO.NET sınıfını örnekliyoruz, herhangi bir bağlantı dizesine, SQL sorgusuna veya saklı yordamlara başvurmamalıdır. Bunun yerine TableAdapter, bizim için alt düzey veri erişim kodunu sağlar.

Bu örnekte kullanılan her nesne Ayrıca kesin olarak belirlenmiş, Visual Studio 'Nun IntelliSense ve derleme zamanı tür denetimi sağlamasına izin verir. TableAdapter tarafından döndürülen tüm DataTable, GridView, DetailsView, DropDownList, CheckBoxList gibi ASP.NET Data Web denetimlerine bağlanabilir. Aşağıdaki örnek, GetProducts() yöntemi tarafından döndürülen DataTable 'ın, Page_Load olay işleyicisi içinde yalnızca bir yalnızca scant üç satır kodu içindeki GridView 'a bağlamasını gösterir.

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

ürünlerin listesi bir GridView içinde görüntülenir

Şekil 13: ürünlerin listesi bir 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ızda Page_Load olay işleyicimize üç satır kod yazmanızı gerektirirken, gelecekteki öğreticilerde, verileri DAL içinden bildirimli olarak almak için ObjectDataSource 'un nasıl kullanılacağını inceleyeceğiz. ObjectDataSource ile herhangi bir kod yazmak zorunda olmayacaktır ve sayfalama ve sıralama desteğini de alacak!

3. Adım: veri erişim katmanına parametreli Yöntemler Ekleme

Bu noktada ProductsTableAdapter sınıfınız, veritabanındaki tüm ürünleri döndüren GetProducts()bir yöntem içerir. Tüm ürünlerle çalışabilmeniz mümkün olsa da, belirli bir ürün veya belirli bir kategoriye ait olan tüm ürünler hakkında bilgi almak istediğimiz durumlar vardır. Veri erişim katmanımız gibi işlevselliği eklemek için TableAdapter 'a parametreli Yöntemler ekleyebiliriz.

GetProductsByCategoryID(categoryID) yöntemini ekleyelim. DAL 'e yeni bir yöntem eklemek için veri kümesi Tasarımcısına dönün, ProductsTableAdapter bölümüne sağ tıklayın ve sorgu Ekle ' yi seçin.

TableAdapter 'a sağ tıklayın ve sorgu Ekle ' yi seçin.

Şekil 14: TableAdapter 'A sağ tıklayın ve sorgu Ekle ' yi seçin.

İlk olarak, veritabanına geçici bir SQL ifadesini veya yeni veya mevcut bir saklı yordamı kullanarak erişmek isteyip istemediğimiz sorulur. Geçici bir SQL ifadesini yeniden kullanmayı seçelim. Ardından, kullanmak istediğimiz SQL sorgusu türü sorulur. Belirtilen bir kategoriye ait tüm ürünleri döndürmek istediğimize göre, satırları döndüren bir SELECT deyimleri yazmak istiyoruz.

satırları döndüren bir SELECT Ifadesinin oluşturulmasını seçin

Şekil 15: satırları döndüren bir SELECT deyimin oluşturulmasını 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 ürünleri döndürmek istediğimize göre, GetProducts()aynı SELECT deyimi kullanıyorum, ancak şu WHERE yan tümcesini ekleyin: WHERE CategoryID = @CategoryID. @CategoryID parametresi, bir TableAdapter sihirbazına, oluşturmakta olduğumuz yöntemin ilgili türde (yani, null atanabilir bir tamsayı) bir giriş parametresi gerektirdiğini gösterir.

yalnızca belirtilen bir kategorideki ürünlerin döndürülmesi için bir sorgu girin

Şekil 16: yalnızca belirtilen bir 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, hangi veri erişimi desenlerini kullanacağınızı ve oluşturulan yöntemlerin adlarını özelleştirmenizi seçebiliriz. Fill deseninin adı FillByCategoryID olarak değiştirelim ve bir DataTable Return deseninin (GetX yöntemleri) döndürdüğü GetProductsByCategoryIDkullanalım.

TableAdapter yöntemlerinin adlarını seçin

Şekil 17: TableAdapter metotları için adları seçin (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sihirbazı tamamladıktan sonra, veri kümesi Tasarımcısı yeni TableAdapter yöntemlerini içerir.

Ürünler artık kategori ile sorgulanabilecek

Şekil 18: ürünler artık kategori ile sorgulanabilecek

Aynı tekniği kullanarak bir GetProductByProductID(productID) yöntemi eklemek için bir dakikanızı ayırın.

Bu parametreli sorgular doğrudan veri kümesi tasarımcısından test edilebilir. TableAdapter ' ta yönteme 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.

Alkolların kategorisine ait olan ürünler gösterilir

Şekil 19: Içecek kategorisine ait olan ürünler gösterilir (tam boyutlu görüntüyü görüntülemek için tıklayın)

GetProductsByCategoryID(categoryID) yöntemi ile, artık yalnızca belirtilen bir kategorideki ürünleri görüntüleyen bir ASP.NET sayfası oluşturuyoruz. Aşağıdaki örnek, CategoryID 1 olan Içecek kategorisindeki tüm ürünleri gösterir.

İçecek. 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>

İçecek. 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

Içecek kategorisindeki Bu ürünler görüntülenir

Şekil 20: alkoller 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: verileri ekleme, güncelleştirme ve silme

Verileri eklemek, güncelleştirmek ve silmek için yaygın olarak kullanılan iki desen vardır. Veritabanı doğrudan modelini çağıracağımız ilk model, çağrıldığında, tek bir veritabanı kaydında çalışan veritabanına INSERT, UPDATEveya DELETE komutu veren Yöntemler oluşturmayı içerir. Bu tür yöntemler genellikle INSERT, Update veya delete değerlerine karşılık gelen bir dizi skalar değer (tamsayılar, dizeler, Boolean, DateTimes, vb.) dizisine geçirilir. Örneğin, Products tablosu için bu Düzenle, Delete yöntemi, silinecek kaydın ProductID belirten bir Integer parametresi içinde, Insert yöntemi ProductNameiçin bir dize, UnitPriceiçin bir tamsayı, UnitsOnStockiçin bir tamsayı, vb. için bir tamsayı alır.

Her ekleme, güncelleştirme ve silme Isteği veritabanına hemen gönderilir

Şekil 21: her ekleme, güncelleştirme ve silme Isteği veritabanına hemen gönderilir (tam boyutlu görüntüyü görüntülemek için tıklatın)

Toplu güncelleştirme düzeninde başvurabileceğiniz diğer bir model, bir yöntem çağrısında tüm veri kümesini, DataTable 'ı veya DataRow koleksiyonunu güncelleştirmek olacaktır. Bu düzende bir geliştirici DataTable içindeki DataRow 'ı siler, ekler ve değiştirir ve ardından bu DataRow veya DataTable 'ı bir Update metoduna geçirir. Bu yöntem daha sonra geçirilen DataRow öğesini numaralandırır, değiştirilip değiştirilmediğini, eklendiğini veya silindiğini (DataRow 'ın RowState özelliği değeri aracılığıyla) belirler ve her kayıt için uygun veritabanı isteğini yayınlar.

güncelleştirme yöntemi çağrıldığında tüm değişiklikler veritabanıyla eşitlenir

Şekil 22: güncelleştirme yöntemi çağrıldığında tüm değişiklikler veritabanıyla eşitlenir (tam boyutlu görüntüyü görüntülemek için tıklayın)

TableAdapter varsayılan olarak Batch güncelleştirme modelini kullanır, ancak VERITABANı doğrudan modelini de destekler. TableAdapter ' ı oluştururken gelişmiş özelliklerden "INSERT, Update ve delete deyimlerini üret" seçeneğini belirlediğimiz için, ProductsTableAdapter Batch Update modelini uygulayan bir Update() yöntemi içerir. Özellikle TableAdapter, türü belirtilmiş veri kümesini, türü kesin belirlenmiş bir DataTable 'ı veya bir ya da daha fazla DataRow 'ı geçirilebilecek bir Update() yöntemi içerir. TableAdapter oluştururken "GenerateDBDirectMethods" onay kutusunu işaretlerseniz, VERITABANı doğrudan deseninin de Insert(), Update()ve Delete() yöntemleri aracılığıyla uygulanması gerekir.

Her iki veri değişikliği deseni, INSERT, UPDATEve DELETE komutlarını veritabanına vermek için TableAdapter 'ın InsertCommand, UpdateCommandve DeleteCommand özelliklerini kullanır. InsertCommand, UpdateCommandve DeleteCommand özelliklerini, veri kümesi tasarımcısında TableAdapter ' a tıklayıp ardından Özellikler penceresi ' a giderek inceleyebilirsiniz. (TableAdapter ' ı seçtiğinizden ve ProductsTableAdapter nesnesinin Özellikler penceresi açılan listede seçili olduğundan emin olun.)

TableAdapter 'ın InsertCommand, UpdateCommand ve DeleteCommand özelliklerine sahip

Şekil 23: TableAdapter InsertCommand, UpdateCommandve DeleteCommand özelliklerine sahiptir (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 Tasarımcısı CommandText alt özelliğine tıklayın.

Sorgu Tasarımcısı INSERT, UPDATE ve DELETE deyimlerini yapılandırma

Şekil 24: Sorgu Tasarımcısı INSERT, UPDATEve DELETE deyimlerini yapılandırın (tam boyutlu görüntüyü görüntülemek için tıklayın)

Aşağıdaki kod örneği, toplu güncelleştirme düzeninin, son olmayan ve stokta 25 birime sahip olan tüm ürünlerin fiyatını iki katına eklemek için 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 kod, belirli bir ürünü programlı olarak silmek, sonra güncelleştirmek ve yeni bir ürün eklemek için DB doğrudan deseninin nasıl kullanılacağını göstermektedir:

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

VERITABANı doğrudan yöntemi tarafından oluşturulan Insert(), Update()ve Delete() yöntemleri, özellikle birden çok sütun içeren tablolar için bir bit, biraz kısası olabilir. Önceki kod örneğine bakıyor, IntelliSense 'in yardımı olmadan, Update() ve Insert() yöntemlerine her giriş parametresine hangi Products tablo sütununu eşlediğini özellikle temizlemez. Yalnızca tek bir sütunu veya ikisini de güncelleştirmek istediğimiz ya da bir özelleştirilmiş Insert() yönteminin, yani yeni eklenen kaydın IDENTITY (otomatik artış) alanının değerini döndürdüğü durumlar olabilir.

Böyle bir özel yöntem oluşturmak için veri kümesi Tasarımcısına dönün. TableAdapter 'a sağ tıklayın ve TableAdapter sihirbazına dönerek sorgu Ekle ' yi seçin. İkinci ekranda, oluşturulacak sorgunun türünü belirtebiliriz. Yeni bir ürün ekleyen ve sonra yeni eklenen kaydın ProductIDdeğerini döndüren bir yöntem oluşturalım. Bu nedenle, INSERT bir sorgu oluşturmayı tercih edin.

Products tablosuna yeni bir satır eklemek için bir yöntem oluşturma

Şekil 25: Products tabloya yeni bir satır eklemek Için bir yöntem oluşturun (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sonraki ekranda InsertCommand``CommandText görüntülenir. Bu sorguyu, sorgunun sonuna SELECT SCOPE_IDENTITY() ekleyerek, aynı kapsamda bir IDENTITY sütununa eklenen son kimlik değerini döndürecek şekilde artırabilir. (SCOPE_IDENTITY() hakkında daha fazla bilgi için teknik belgelere ve neden büyük olasılıkla @@IDENTITYyerıne kapsam_kimliği () kullanmak istediğimize bakın.) SELECT ifadesini eklemeden önce INSERT ifadesini noktalı virgül ile sonlandırdığınızdan emin olun.

SCOPE_IDENTITY () değerini döndürecek şekilde sorguyu artırmak

Şekil 26: SCOPE_IDENTITY() değerini döndürmek için sorguyu artırmak (tam boyutlu görüntüyü görüntülemek için tıklayın)

Son olarak, yeni yöntemi InsertProductadlandırın.

Yeni yöntem adını InsertProduct olarak ayarlamak

Şekil 27: yeni yöntem adını InsertProduct olarak ayarlayın (tam boyutlu görüntüyü görüntülemek için tıklayın)

Veri kümesi tasarımcısına geri döndüğünüzde, ProductsTableAdapter InsertProductyeni bir yöntem içerdiğini görürsünüz. Bu yeni yöntemin Products tablodaki her bir sütun için bir parametresi yoksa, INSERT deyimini noktalı virgülle sonlandırmayı unutmanız gerekir. InsertProduct yöntemini yapılandırın ve INSERT ve SELECT deyimlerini sınırlayan noktalı virgülle ayırın.

Varsayılan olarak, ekleme yöntemleri sorgu dışı Yöntemler vererek etkilenen satırların sayısını döndürtikleri anlamına gelir. Ancak, InsertProduct yönteminin, etkilenen satır sayısı değil, sorgu tarafından döndürülen değeri döndürmesini istiyoruz. Bunu gerçekleştirmek için, InsertProduct yönteminin ExecuteMode özelliğini Scalarolarak ayarlayın.

ExecuteMode özelliğini skaler olarak değiştirme

Şekil 28: ExecuteMode özelliğini Scalar olarak değiştirin (tam boyutlu görüntüyü görüntülemek için tıklayın)

Aşağıdaki kod bu yeni InsertProduct metodunu eylemde 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

ProductsTableAdapters sınıfının Products tablosundan CategoryID ve SupplierID değerlerini döndürdüğünü, ancak bu büyük olasılıkla ürün bilgilerini gösterirken, CategoryName tablosundan veya Categories sütunundan CompanyName sütununu içermediğini unutmayın.Suppliers TableAdapter 'ın ilk yöntemini GetProducts(), hem CategoryName hem de CompanyName sütun değerlerini dahil etmek için, bu yeni sütunları da içerecek şekilde kesin olarak yazılmış DataTable 'ı güncelleştirecek şekilde,.

Bu, bir sorun oluşturabilir, ancak TableAdapter 'ın veri ekleme, güncelleştirme ve silme yöntemleri bu başlangıç yöntemine göre yapılır. Neyse ki, ekleme, güncelleştirme ve silme için otomatik olarak oluşturulan Yöntemler SELECT yan tümcesindeki alt sorgularda etkilenmez. Sorguları Categories ve Suppliers JOIN s yerine alt sorgular olarak eklemek için, verileri değiştirmek için bu yöntemleri yeniden yapmak zorunda kalmaktan kaçınacağız. ProductsTableAdapter GetProducts() yöntemine sağ tıklayın ve Yapılandır ' ı seçin. Ardından, SELECT yan tümcesini, şöyle görünmesi için 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

GetProducts () yöntemi için SELECT Ifadesini güncelleştirme

Şekil 29: GetProducts() yöntemi Için SELECT ifadesini güncelleştirin (tam boyutlu görüntüyü görüntülemek için tıklayın)

GetProducts() yöntemini bu yeni sorguyu kullanacak şekilde güncelleştirdikten sonra DataTable iki yeni sütun içerir: CategoryName ve SupplierName.

Products DataTable 'ın Iki yeni sütunu vardır

Şekil 30: Products DataTable 'ın Iki yeni sütunu vardır

GetProductsByCategoryID(categoryID) yönteminde SELECT yan tümcesini de güncellemek için bir dakikanızı ayırın.

JOIN sözdizimini kullanarak GetProducts() SELECT güncelleştirirseniz veri kümesi Tasarımcısı, veritabanı verilerini ekleme, güncelleştirme ve silme yöntemlerini DB doğrudan düzeniyle otomatik olarak oluşturamayacak. Bunun yerine, Bu öğreticinin önceki kısımlarında InsertProduct yöntemi ile yaptığımız gibi el ile oluşturmanız gerekir. Ayrıca, Batch güncelleştirme modelini kullanmak istiyorsanız, InsertCommand, UpdateCommandve DeleteCommand özellik değerlerini el ile sağlamanız gerekir.

Kalan TableAdapters ekleme

Şimdi tek bir veritabanı tablosu için tek bir TableAdapter ile çalışmaya bakıyoruz. Bununla birlikte, Northwind veritabanı Web uygulamamızda ile birlikte çalışmak için gereken birkaç ilgili tablo içerir. Türü belirtilmiş bir veri kümesi birden çok, ilgili DataTable içerebilir. Bu nedenle, DAL olarak bu öğreticilerde kullanacağımız diğer tablolar için DataTable eklememiz gerekiyor. Türü belirtilmiş bir veri kümesine yeni bir TableAdapter eklemek için veri kümesi tasarımcısını açın, tasarımcıya sağ tıklayın ve Ekle/TableAdapter ' ı seçin. Bu, yeni bir DataTable ve TableAdapter oluşturur ve bu öğreticide daha önce incelendiğimiz sihirbazda size kılavuzluk eder.

Aşağıdaki sorguları kullanarak aşağıdaki TableAdapters ve yöntemleri oluşturmak için birkaç dakikanızı alın. ProductsTableAdapter sorguların her ürünün kategori ve Tedarikçi adlarını almak için alt sorguları olduğunu unutmayın. Ayrıca, daha sonra takip ediyorsanız, ProductsTableAdapter sınıfın GetProducts() ve GetProductsByCategoryID(categoryID) yöntemlerini zaten eklemiş oldunuz.

  • 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
      
    • Getproductsbycategoryıd:

      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
      
    • Getproductsbysupplierıd:

      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
      
    • Getcategorybycategoryıd:

      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
      
    • Getsupplierbysupplierıd:

      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
      

Dört TableAdapters eklendikten sonra veri kümesi tasarımcısını

Şekil 31: dört TableAdapters sonra veri kümesi Tasarımcısı (tam boyutlu görüntüyü görüntülemek için tıklayın)

DAL için özel kod ekleme

Türü belirtilmiş veri kümesine eklenen TableAdapters ve DataTable, bir XML şema tanımı dosyası (Northwind.xsd) olarak ifade edilir. Bu şema bilgilerini, Çözüm Gezgini Northwind.xsd dosyasına sağ tıklayıp kodu görüntüle ' yi seçerek görüntüleyebilirsiniz.

Northwintürü belirtilmiş veri kümesinin XML şema tanımı (XSD) dosyası

Şekil 32: Northwinds türünde VERI kümesinin XML şema tanımı (xsd) dosyası (tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu şema bilgileri C# , derleme zamanında derlendiğinde veya çalışma zamanında (gerekliyse) kodu Visual Basic dönüştürülür. bu noktada, hata ayıklayıcıyla adım adım ilerlenebilir. Otomatik olarak oluşturulan bu kodu görüntülemek için Sınıf Görünümü gidin ve TableAdapter veya Typed DataSet sınıflarının detayına gidin. Ekranınızda Sınıf Görünümü görmüyorsanız, Görünüm menüsüne gidin ve buradan seçin ya da CTRL + SHIFT + C tuşlarına basın. Sınıf Görünümü, yazılan veri kümesinin 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ü Yöntem adına çift tıklayın veya sağ tıklayın ve tanıma git ' i seçin.

Sınıf Görünümü tanıma git ' i seçerek otomatik oluşturulan kodu inceleyin

Şekil 33: sınıf görünümü tanıma git ' i seçerek otomatik oluşturulan kodu inceleyin

Otomatik olarak oluşturulan kod harika bir zaman koruyucu olabilir, ancak kod genellikle çok geneldir ve uygulamanın benzersiz ihtiyaçlarını karşılamak için özelleştirilmelidir. Ancak otomatik olarak oluşturulan kodu genişletme riski, kodu oluşturan aracın, "yeniden oluşturma" ve özelleştirmelerinizin ü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 Dosya arasında ayırmak kolaydır. Bu, kendi yöntemlerimizi, özellikleri ve olayları, özelleştirmelerimizin üzerine yazarak Visual Studio hakkında endişelenmenize gerek kalmadan otomatik oluşturulan sınıflara eklememize olanak sağlar.

DAL özelleştirmeyi göstermek için SuppliersRow sınıfına bir GetProducts() yöntemi ekleyelim. SuppliersRow sınıfı, Suppliers tablosundaki tek bir kaydı temsil eder; her tedarikçi, her bir tedarikçide, belirtilen tedarikçinin ürünlerini döndürecek GetProducts(), bu ürünlerin her biri için bir sağlayıcı olabilir. Bunu gerçekleştirmek için SuppliersRow.vb adlı App_Code klasörde yeni bir sınıf dosyası 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, daha önce tanımladığımız GetProducts() yöntemi eklemek için Northwind.SuppliersRow sınıfını oluştururken derleyiciye bildirir. Projenizi derleyebilir ve ardından Sınıf Görünümü geri dönerseniz, artık Northwind.SuppliersRowbir yöntem olarak listelenmiş GetProducts() görürsünüz.

GetProducts () yöntemi artık Northwind. SuppliersRow sınıfının bir parçasıdır

Şekil 34: GetProducts() yöntemi artık Northwind.SuppliersRow sınıfının bir parçasıdır

GetProducts() yöntemi artık, aşağıdaki kodda gösterildiği gibi belirli bir tedarikçinin ürün kümesini numaralandırmak 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 aynı zamanda ASP ' de görüntülenebilir. NET 'in veri Web denetimleri. Aşağıdaki sayfada iki alan içeren bir GridView denetimi kullanılmıştır:

  • Her tedarikçinin adını görüntüleyen bir BoundField ve
  • Her bir tedarikçi için GetProducts() yöntemi tarafından döndürülen sonuçlara bağlanan bir BulletedList denetimi içeren TemplateField.

Bu tür ana ayrıntı raporlarının gelecekteki öğreticilerde nasıl görüntüleneceğini inceleyeceğiz. Şimdilik bu örnek, Northwind.SuppliersRow sınıfına eklenen özel yöntemin kullanımını göstermek için 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

, tedarikçinin şirket adı sol sütunda, sağ taraftaki ürünlerle listelenir

Şekil 35: tedarikçinin şirket adı sol sütunda, sağ taraftaki ürünlerde listelenir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Özet

Bir Web uygulaması oluşturulurken DAL oluşturma, sunum katmanınızı oluşturmaya başlamadan önce ortaya çıkan ilk adımlardan biri olmalıdır. Visual Studio ile, türü belirtilmiş veri kümelerine dayalı bir DAL oluşturmak, kod satırı yazmadan 10-15 dakika içinde gerçekleştirilebilen bir görevdir. İleriye doğru ilerleyen öğreticiler bu DAL üzerine oluşturulacak. Bir sonraki öğreticide , bir dizi iş kuralı tanımlayacağız ve bunları ayrı bir Iş mantığı katmanında nasıl uygulayacağınızı görürsünüz.

Programlamanın kutlu olsun!

Daha Fazla Bilgi

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Bu öğreticide bulunan konularda video eğitimi

Yazar hakkında

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister. mitchell@4GuysFromRolla.comadresinden erişilebilir . ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.

Özel olarak teşekkürler

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi. Bu öğreticiye ilişkin müşteri adayı gözden geçirenler, deniz yeşili, Tepton Giesenow, dennıs Patterson, Liz Shulok, Abel Gomez ve Carlos Santos. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz? Öyleyse, benimitchell@4GuysFromRolla.combir satır bırakın .