Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 hayatımız verilerle çalışma etrafında dönüyor. Verileri depolamak için veritabanları, bunları 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 serinin ilk öğreticisidir. Türemiş Veri Kümelerini, özel iş kurallarını zorunlu kılan bir İş Mantığı Katmanını (BLL) ve ortak sayfa düzenini paylaşan ASP.NET sayfalardan oluşan bir sunu katmanını kullanarak Veri Erişim Katmanından (DAL) oluşan bir yazılım mimarisi oluşturmakla başlayacağız. Bu arka uç temel çalışması hazırlandıktan sonra raporlamaya geçeceğiz ve web uygulamasından verileri görüntüleme, özetleme, toplama ve doğrulama adımlarını göstereceğ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ü içeren 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 geri kalanı ç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 NORTHWNDConnectionString
dosyasındaki Web.config
ayarı güncelleştirmeniz 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 eşit derecede iyi çalışacaktı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ü öğreticiden 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: 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, 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 Türemiş Veri Kümeleri 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 zaten 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 kurulumunun olup olmadığına bağlıdır.
Klasörde VeritabanıApp_Data
Kullanma
Bağlanacak bir SQL Server 2000 veya 2005 veritabanı sunucunuz yoksa veya veritabanını bir veritabanı sunucusuna eklemek zorunda kalmamak 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.
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ör App_Data
, SQL Server karşılıkları gibi Sunucu Gezgini'ne 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. Ancak Access veritabanlarının SQL Server kadar özellik açısından zengin 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 belirli veritabanı düzeyindeki özellikleri kullanır.
Microsoft SQL Server 2000 veya 2005 Veritabanı Sunucusu'nda 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 Bağlantıları 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 Bağlantıları düğümünü 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ı Oluşturma
Verilerle çalışırken bir 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ünde 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 bir arada kullanır. 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 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, SELECT
, INSERT
, UPDATE
ve DELETE
komutları verme 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 hiçbir başvuru içermemeli, bunun yerine tüm veri istekleri için DAL'ye çağrılar 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 Products
ait oldukları kategorileri kaydeden ve tabloları vardırCategories
. DAL'mizde şu yöntemlere sahip olacağız:
-
GetCategories(),
tüm kategoriler hakkında bilgi döndürecek -
GetProducts()
, tüm ürünlerle ilgili bilgileri döndürür -
GetProductsByCategoryID(categoryID)
, belirtilen bir kategoriye ait tüm ürünleri döndürür -
GetProductByProductID(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, 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 kesin olarak tanımlanmış olan nesnedir; bunun tam tersi, gevşek türdeki bir nesne ise çalışma zamanına kadar şeması bilinmeyen 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ürde 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 yazma işlemi, bir dize veya sıra dizini kullanarak sütun adına erişmemiz gerektiği gerçeğiyle ortaya konur. Öte yandan, kesin olarak türlenmiş bir DataTable, 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 belirlenmiş nesneler döndürmek için geliştiriciler kendi özel iş nesnelerini oluşturabilir veya Türlenmiş Veri Kümeleri kullanabilir. İş nesnesi, geliştirici tarafından genellikle iş nesnesinin temsil ettiği temel veritabanı tablosunun sütunlarını yansıtan bir sınıf olarak uygulanır. Türlenmiş Veri Kümesi, visual studio tarafından bir veritabanı şemasına dayalı olarak sizin için oluşturulan ve üyeleri bu şemaya göre kesin olarak yazılan bir sınıftır. Türü Belirtilen DataSet'in kendisi DataSet, DataTable ve DataRow sınıflarını genişleten ADO.NET sınıflardan oluşur. Kesin olarak yazılan DataTable'lara ek olarak, Yazılan DataSet'ler artık DataSet'in DataTable'larını doldurma ve DataTable'lar içindeki değişiklikleri veritabanına geri yayma yöntemlerine sahip sınıflar olan TableAdapters'ı da içerir.
Not
Türemiş Veri Kümelerini kullanmanın özel iş nesneleriyle karşı karşıya kullanmanın avantajları ve dezavantajları hakkında daha fazla bilgi için bkz. Veri Katmanı Bileşenleri Tasarlama ve KatmanlarDan Veri Geçirme.
Bu öğreticilerin mimarisi için kesin türemiş 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 Devredildi (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Türlenmiş Veri Kümesi 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ımcı görüntülenir ve TableAdapter Yapılandırma Sihirbazı başlatılır ve ilk TableAdapter'ınızı Yazılan Veri Kümesine eklemenize olanak tanır.
Türlenmiş Veri Kümesi, kesin olarak türlenmiş bir veri koleksiyonu işlevi görür; her biri kesin olarak türü 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 belirlenmiş bir DataTable oluşturacağız. Şimdi tablo için Products
bir DataTable oluşturarak başlayalım.
Kesin olarak yazılan DataTable'ların, temel alınan veritabanı tablolarındaki verilere nasıl erişeceklerine ilişkin hiçbir bilgi içermediğini unutmayın. DataTable'ı dolduracak verileri almak için, Veri Erişim Katmanımız olarak işlev gösteren bir TableAdapter sınıfı kullanırız. DataTable'ımız Products
için TableAdapter, sunu katmanından çağıracağımız , GetProducts()
vb. yöntemlerini GetProductByCategoryID(categoryID)
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, bunu yapmak için şu anda Yeni Bağlantı düğmesine tıklayabilirsiniz.
Ş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 İ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ına sabit kodlanmış olmasını önlersiniz; bu da gelecekte bağlantı dizesi bilgilerin değişmesi durumunda işleri basitleştirir. bağlantı dizesi yapılandırma dosyasına kaydetmeyi tercih ederseniz, bu bölüme yerleştirilir<connectionStrings>
; gelişmiş güvenlik için isteğe bağlı olarak şifrelenebilir veya daha sonra YÖNETICILER için daha ideal olan IIS GUI Yönetim Aracı'ndaki 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 olarak belirlenmiş ilk DataTable için şemayı tanımlamamız ve kesin türe sahip DataSet'i doldurma sırasında TableAdapter'ımız için kullanılacak ilk yöntemi sağlamamız gerekir. Bu iki adım, DataTable'ımıza 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 olarak 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şturur.
Şekil 9: Sorgu Düzenleyicisi aracılığıyla Sorguyu 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 varsayılan olarak seçilen tek gelişmiş seçenek "Ekle, Güncelleştir ve Sil deyimleri oluştur" seçeneğidir; 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. Şimdilik "İyimser eşzamanlılık kullan" seçeneğini 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 doldurun 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üğü şekilde döndürdüğü bu yaklaşımla bir DataTable döndürür.
TableAdapter'ın bu desenlerden birini veya her ikisini de gerçekleştirmesini sağlayabilirsiniz. Burada sağlanan yöntemleri de yeniden adlandırabilirsiniz. Bu öğreticiler boyunca yalnızca ikinci deseni 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" adlı son onay kutusu TableAdapter için , Insert()
ve Update()
yöntemlerini oluştururDelete()
. 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 deyimlerini oluştur" seçeneğinin işaretini kaldırdıysanız bu onay kutusunun ayarı hiçbir etkisi olmaz.) Bu onay kutusunu seçili bırakalım.
Şekil 11: Yöntem Adını olarak GetData
GetProducts
değiştirme (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 Designer'a geri döneriz. DataTable'da (Products
, vb.) sütunların ProductID
listesini ve (ProductName
ve ProductsTableAdapter
) yöntemlerini Fill()
GetProducts()
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 NorthwindTableAdapters.ProductsTableAdapter
bir Türlenmiş DataSet'imiz vardırGetProducts()
. 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 bit kod yazmamızı gerektirmez. hiçbir ADO.NET sınıfı örneği oluşturmamıza gerek yoktu, hiçbir bağlantı dizesi, SQL sorgusuna veya saklı yordama 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'nın IntelliSense ve derleme zamanı türü denetimi sağlamasına olanak sağlar. TableAdapter tarafından döndürülen tüm DataTable'ların en iyisi GridView, DetailsView, DropDownList, CheckBoxList gibi veri Web denetimlerini ASP.NET 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 bir GridView'a Page_Load
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üleniyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bu örnekte, ASP.NET sayfamızın Page_Load
olay işleyicisinde üç kod satırı yazmamız gerekse de, gelecek öğreticilerde, DAL'den verileri bildirimli olarak almak için ObjectDataSource'un nasıl kullanılacağını inceleyeceğiz. ObjectDataSource ile herhangi bir kod yazmamız gerekmeyecek ve disk belleği 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ızın 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.
Şimdi yöntemini ekleyelim GetProductsByCategoryID(categoryID)
. DAL'ye yeni bir yöntem eklemek için DataSet Designer'a dönün, bölüme ProductsTableAdapter
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 geçici bir SQL deyimi 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 olan 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, ile aynı SELECT
deyimi kullanıyorum ancak şu GetProducts()
yan tümcesini ekliyorum: WHERE
.WHERE CategoryID = @CategoryID
@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 hangi veri erişim desenlerinin kullanılacağını seçebilir ve oluşturulan yöntemlerin adlarını özelleştirebiliriz. Dolgu deseni için, datatable dönüş deseni (FillByCategoryID
yöntemler) için adını GetX
ve olarak değiştirelim, şimdi kullanalımGetProductsByCategoryID
.
Ş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ımcısı 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 Designer'dan 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 görüntüyü görüntülemek için tıklayın)
GetProductsByCategoryID(categoryID)
DAL'mizdeki yöntemi kullanarak artık yalnızca belirli bir kategorideki ürünleri görüntüleyen bir ASP.NET sayfası oluşturabiliriz. Aşağıdaki örnek, 1 olan İçecekler kategorisindeki CategoryID
tüm ürünleri gösterir.
İçecekler.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üleniyor (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 bir ondalık UnitPrice
, 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, tek 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ı ile 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 oluştururken "GenerateDBDirectMethods" onay kutusunu işaretli bıraktıysanız, VERITABANı doğrudan deseni , Insert()
ve Update()
yöntemleri aracılığıyla Delete()
da uygulanır.
Her iki veri değişikliği deseni de, , ve komutlarını InsertCommand
veritabanına vermek için TableAdapter 'ın UpdateCommand
DeleteCommand
, INSERT
ve UPDATE
özelliklerini kullanır.DELETE
DataSet Designer'da InsertCommand
TableAdapter'a tıklayıp Özellikler penceresi giderek , UpdateCommand
ve DeleteCommand
özelliklerini inceleyebilir ve değiştirebilirsiniz. (TableAdapter'ı seçtiğinizden ve nesnenin ProductsTableAdapter
Özellikler penceresi açılan listesinde seçilen nesne olduğundan emin olun.)
Şekil 23: TableAdapter, , InsertCommand
ve UpdateCommand
Özelliklerine sahiptir DeleteCommand
(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 , INSERT
ve UPDATE
Deyimlerini yapılandırma DELETE
(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, durdurulmayan ve stokta 25 birim veya daha az olan tüm ürünlerin fiyatını iki katına getirmek 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 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 deseninin 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 birçok sütunu olan tablolar için biraz zahmetli olabilir. IntelliSense'in yardımı olmadan önceki kod örneğine baktığımızda, hangi tablo sütununun her giriş parametresiyle ve Products
yöntemlerine Update()
eşlediği özellikle net Insert()
değildir. Yalnızca bir veya iki sütunu güncelleştirmek istediğimiz veya yeni eklenen kaydın Insert()
(otomatik artırma) alanının değerini döndürecek özelleştirilmiş IDENTITY
bir yöntem istediğimiz zamanlar olabilir.
Böyle bir özel yöntem oluşturmak için DataSet Designer'a 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 ekleyip yeni eklenen kaydın ProductID
değerini döndüren bir yöntem oluşturalım. Bu nedenle, sorgu INSERT
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 'InsertCommand
ler CommandText
görüntülenir. Sorgunun sonuna ekleyerek SELECT SCOPE_IDENTITY()
bu sorguyu genişletin. Bu, aynı kapsamdaki bir IDENTITY
sütuna eklenen son kimlik değerini döndürür. (@@IDENTITY yerine SCOPE_IDENTITY() kullanmak isteme SCOPE_IDENTITY()
.) 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öntemini InsertProduct
olarak adlandırın.
Ş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)
DataSet Designer'a döndüğünüzde öğesinin yeni bir yöntem ProductsTableAdapter
içerdiğini InsertProduct
görürsünüz. Bu yeni yöntemin tablodaki Products
her sütun için bir parametresi yoksa, deyimini noktalı virgülle sonlandırmayı INSERT
unutma olasılığınız vardır.
InsertProduct
yöntemini yapılandırın ve ve INSERT
deyimlerini sınırlandıran noktalı virgüle sahip olduğunuzdan SELECT
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 yapmak için yönteminin InsertProduct
ExecuteMode
özelliğini olarak Scalar
ayarlayın.
Şekil 28: Özelliği ExecuteMode
olarak değiştirme Scalar
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Aşağıdaki kod, bu yeni InsertProduct
yöntemin ç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 ProductsTableAdapters
tablodaki CategoryID
SupplierID
ve Products
değerlerini döndürdüğünü, ancak tablodaki CategoryName
sütunu veya tablodaki Categories
sütunu CompanyName
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. TableAdapter'ın ilk yönteminiGetProducts()
, hem hem CategoryName
de CompanyName
sütun değerlerini içerecek şekilde genişletebiliriz. Bu, kesin olarak yazılmış 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 alır. 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ı Categories
yerine alt Suppliers
sorgular JOIN
olarak eklemeye özen göstererek, verileri değiştirmek için bu yöntemleri yeniden düzenlemek zorunda kalmayacağı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
Yöntemdeki SELECT
yan tümcesini GetProductsByCategoryID(categoryID)
de güncelleştirmek için biraz zaman ayırın.
Söz dizimini GetProducts()
SELECT
kullanarak JOIN
güncelleştirirseniz, DataSet Designer veritabanı verilerini doğrudan veritabanı desenini kullanarak ekleme, güncelleştirme ve silme yöntemlerini 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 TableAdapters'i ekleme
Şimdiye kadar tek bir veritabanı tablosu için 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 Bir DataSet 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. Yazılan Bir DataSet'e yeni bir TableAdapter eklemek için DataSet Designer'ı açın, Tasarımcı'ya 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 için birkaç dakika bekleyin. 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.
ÜrünlerTableAdapter
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
KategorilerTabloAdaptörü
Almak Kategorileri:
SELECT CategoryID, CategoryName, Description FROM Categories
GetCategoryByCategoryID:
SELECT CategoryID, CategoryName, Description FROM Categories WHERE CategoryID = @CategoryID
TedarikçilerTableAdapter
Tedarikçiler almak:
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 (ÇalışanlarTablo Bağdaştırıcısı)
GetÇalışanlar:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees
GetEmployeesByManager çalıştır:
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 TableAdapter Eklendikten Sonra DataSet Tasarımcısı (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 tasarım zamanında veya çalışma zamanında (gerekirse) 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 kazandırıcı olsa da, kod genellikle çok geneldir ve bir uygulamanın benzersiz gereksinimlerini karşılayacak şekilde özelleştirilmesi gerekir. Ancak otomatik olarak oluşturulan kodu genişletme riski, kodu oluşturan aracın özelleştirmelerinizi "yeniden oluşturmanın" ve üzerine yazmanın zamanına karar verebileceğidir. .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 GetProducts()
bir SuppliersRow
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ğlayıcı sağlayabilir, bu nedenle GetProducts()
belirtilen sağlayıcının ürünlerini döndürür. Bunu yapmak için adlı App_Code
klasörde yeni bir sınıf dosyası SuppliersRow.vb
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 GetProducts()
olarak listelendiğini görürsünüzNorthwind.SuppliersRow
.
Ş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ı olan 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 bir 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ıfına eklenen özel yöntemi kullanarak göstermek üzere Northwind.SuppliersRow
tasarlanmıştır.
TedarikçilerVeÜrünler.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 Listelenmiştir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
DAL'yi oluşturan bir web uygulaması oluştururken, sunu katmanınızı oluşturmaya başlamadan önce gerçekleşen ilk adımlardan biri olmalıdır. Visual Studio ile, Yazılan Veri Kümelerini temel alan bir DAL oluşturmak, kod satırı yazmadan 10-15 dakika içinde gerçekleştirilebilecek bir görevdir. İleriye dönük öğreticiler bu DAL'nin üzerine inşa edilecek. 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 Güçlü Türe Sahip TableAdapters 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 Kesin TüreMiş Veri Erişimi Kullanma
- TableAdapter Yöntemlerini Genişletme
Bu Öğreticide Yer Alan Konulara Yönelik 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ışır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Ona adresinden mitchell@4GuysFromRolla.comulaşabilirsiniz.
Ö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. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, mitchell@4GuysFromRolla.com'a bir mesaj bırakın.