Aracılığıyla paylaş


Ek DataTable Sütunları Ekleme (VB)

tarafından Scott Mitchell

PDF'i indirin

Typed DataSet oluşturmak için TableAdapter Sihirbazı kullanılırken, karşılık gelen DataTable ana veritabanı sorgusu tarafından döndürülen sütunları içerir. Ancak DataTable'ın ek sütunlar içermesi gereken durumlar vardır. Bu kılavuzda, ek DataTable sütunlarına ihtiyacımız olduğunda neden saklı yordamların önerildiğini öğreneceğiz.

Giriş

Typed DataSet'e TableAdapter eklerken, karşılık gelen DataTable şeması TableAdapter'ın ana sorgusu tarafından belirlenir. Örneğin, ana sorgu A, B ve C veri alanlarını döndürürse DataTable'da A, B ve C adlı karşılık gelen üç sütun bulunur. TableAdapter, ana sorgusuna ek olarak verilerin bir alt kümesini bazı parametrelere göre döndüren ek sorgular da içerebilir. Örneğin, tüm ürünler hakkında bilgi döndüren s ana sorgusuna ProductsTableAdapter ek olarak, sağlanan parametreye göre belirli ürün bilgilerini döndüren ve GetProductsByCategoryID(categoryID)gibi GetProductByProductID(productID) yöntemler de içerir.

DataTable şemasına sahip olma modeli TableAdapter'ın ana sorgusunu yansıtır. Tüm TableAdapter yöntemlerinin ana sorguda belirtilenlerden aynı veya daha az veri alanı döndürmesi durumunda düzgün çalışır. TableAdapter yönteminin ek veri alanları döndürmesi gerekiyorsa DataTable şemasını buna göre genişletmemiz gerekir. Master/Details DataList ile Ana Kayıtların Madde İşaretli Listesini Kullanma öğreticisinde, ana sorguda tanımlanan CategoriesTableAdapter, CategoryID, ve CategoryName veri alanlarını ve her kategoriyle ilişkili ürün sayısını bildiren ek bir veri alanını döndüren bir yöntemi Description içine ekledik. Yeni yöntemden CategoriesDataTable veri alanı değerini yakalamak için NumberOfProducts öğesine manuel olarak yeni bir sütun ekledik.

Dosyaları Karşıya Yükleme öğreticisinde açıklandığı gibi, geçici SQL deyimleri kullanan ve veri alanları ana sorguyla tam olarak eşleşmeyen yöntemleri olan TableAdapters ile çok dikkatli olunmalıdır. TableAdapter Yapılandırma sihirbazı yeniden çalıştırılırsa, tüm TableAdapter yöntemlerini güncelleştirerek veri alanı listesinin ana sorguyla eşleşmesini sağlar. Sonuç olarak, özelleştirilmiş sütun listelerine sahip tüm yöntemler ana sorgunun sütun listesine geri döner ve beklenen verileri döndürmez. Saklı yordamlar kullanıldığında bu sorun ortaya çıkmaz.

Bu öğreticide, bir DataTable şemasını ek sütunlar içerecek şekilde genişletmeyi inceleyeceğiz. Geçici SQL deyimlerini kullanırken TableAdapter'ın kırılganlığı nedeniyle bu öğreticide saklı yordamları kullanacağız. TableAdapter’ı saklı yordamları kullanacak şekilde yapılandırma hakkında daha fazla bilgi için, TableAdapters’ın Yazılan DataSet için Yeni Saklı Yordamlar Oluşturma ve Varolan Saklı Yordamları Kullanma öğreticilerine bakın.

1. Adım: Sütun EklemePriceQuartileProductsDataTable

Typed DataSet'in TableAdapters için Yeni Saklı Yordamlar Oluşturma öğreticisinde, NorthwindWithSprocs adlı bir Türlenmiş DataSet oluşturduk. Bu DataSet şu anda iki DataTable içerir: ProductsDataTable ve EmployeesDataTable. ProductsTableAdapter aşağıdaki üç yönteme sahiptir:

  • GetProducts - tablodan tüm kayıtları Products döndüren ana sorgu
  • GetProductsByCategoryID(categoryID) - belirtilen categoryID değerine sahip tüm ürünleri döndürür.
  • GetProductByProductID(productID) - belirtilen ürün kimliğine sahip belirli bir ürünü döndürür.

Ana sorgu ve ek iki yöntemin tümü, tablodaki tüm sütunlar Products gibi aynı veri alanları kümesini döndürür. Bağıntılı alt sorgular veya JOIN 'ler Categories veya Suppliers tablolarından ilişkili veri çekmiyor. Bu nedenle, ProductsDataTable tablosundaki her alan için Products karşılık gelen bir sütun vardır.

Bu öğreticide, ProductsTableAdapter adlı GetProductsWithPriceQuartile öğesine tüm ürünleri döndüren bir yöntem ekleyelim. Standart ürün veri alanlarına ek olarak, GetProductsWithPriceQuartile ürünün fiyatının hangi dörttebire düştüğünü gösteren bir PriceQuartile veri alanı da içerecektir. Örneğin, fiyatları en pahalı 25% olan ürünlerin değeri 1 olurken PriceQuartile , fiyatları en düşük 25% olan ürünlerin değeri 4 olur. Saklı yordamı bu bilgiyi döndürmek amacıyla oluşturmadan önce, yöntemi ProductsDataTable kullanıldığında PriceQuartile sonuçlarını tutacak bir sütun eklemek için GetProductsWithPriceQuartile güncelleştirmemiz gerekir.

DataSet'i NorthwindWithSprocs açın ve öğesine ProductsDataTablesağ tıklayın. Bağlam menüsünden Ekle'yi ve ardından Sütun'u seçin.

ProductsDataTable'a Yeni Sütun Ekleme

Şekil 1: ProductsDataTable Öğesine Yeni Bir Sütun Ekleyin (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bu, DataTable'a sütun1 System.Stringtüründe yeni bir sütun ekler. 1 ile 4 arasında bir sayıyı tutmak için kullanılacağından bu sütunun adını PriceQuartile ve türünü System.Int32 olarak güncelleştirmemiz gerekir. Yeni eklenen sütunu ProductsDataTable içinde seçin ve Özellikler penceresi üzerinden Name özelliğini PriceQuartile olarak, DataType özelliğini ise System.Int32 olarak ayarlayın.

Yeni Sütunun Adını ve DataType Özelliklerini Ayarlama

Şekil 2: Yeni Sütun ve NameDataType Özellikleri Ayarlama (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Şekil 2'de gösterildiği gibi, sütundaki değerlerin benzersiz olması gerekip gerekmediği, sütun otomatik artırma sütunuysa, veritabanı NULL değerlerine izin verilip verilmeyeceği gibi ek özellikler ayarlanabilir. Bu değerleri varsayılan değerlerine ayarlanmış olarak bırakın.

2. Adım: Yöntemi OluşturmaGetProductsWithPriceQuartile

ProductsDataTable şimdi PriceQuartile sütununu içerecek şekilde güncellenmiştir, bu yüzden GetProductsWithPriceQuartile yöntemini oluşturmaya hazırız. TableAdapter'a sağ tıklayıp bağlam menüsünden Sorgu Ekle'yi seçerek başlayın. Öncelikle ad-hoc SQL ifadeleri mi yoksa yeni veya mevcut bir saklı yordamı mı kullanmak istediğimizi soran TableAdapter Sorgu Yapılandırma sihirbazını getirir. Fiyat dörttebirlik verilerini döndüren bir saklı yordamımız olmadığından TableAdapter'ın bu saklı yordamı oluşturmasına izin verelim. Yeni saklı yordam oluştur seçeneğini belirleyin ve İleri'ye tıklayın.

TableAdapter Sihirbazı'na Bizim İçin Saklı Prosedürü Oluşturma Talimatı Ver

Şekil 3: TableAdapter Sihirbazı'na bizim için saklı prosedürü oluşturması için talimat verin (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Şekil 4'te gösterilen sonraki ekranda sihirbaz bize ne tür bir sorgu ekleneceğini sorar. GetProductsWithPriceQuartile metodunun Products tablosundaki tüm sütunları ve kayıtları döndüreceğinden, satırları döndüren SELECT ifadesini seçin ve İleri'ye tıklayın.

Sorgumuz, Birden Çok Satır Döndüren bir SELECT Deyimi olacaktır

Şekil 4: Sorgumuz Birden Çok Satır Döndüren Bir SELECT Deyim Olacaktır (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Ardından sorguyu girmemiz isteniyor SELECT. Sihirbaza aşağıdaki sorguyu girin:

SELECT ProductID, ProductName, SupplierID, CategoryID, 
       QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, 
       ReorderLevel, Discontinued,
       NTILE(4) OVER (ORDER BY UnitPrice DESC) as PriceQuartile
FROM Products

Yukarıdaki sorgu, sonuçları grupların azalan düzende sıralanmış değerlere göre NTILE belirlendiği dört gruba bölmek için SQL Server 2005'in yeni kullanır.

Ne yazık ki Sorgu Oluşturucusu anahtar sözcüğün OVER nasıl ayrıştırılacağını bilmez ve yukarıdaki sorguyu ayrıştırırken bir hata görüntüler. Bu nedenle, Sorgu Oluşturucusu'nu kullanmadan yukarıdaki sorguyu doğrudan sihirbazdaki metin kutusuna girin.

Uyarı

NTILE ve SQL Server 2005'in diğer derecelendirme işlevleri hakkında daha fazla bilgi için SQL Server 2005 Books Online'ınROW_NUMBER (Transact-SQL) ve Derecelendirme İşlevleri bölümüne bakın.

Sorguyu SELECT girip İleri'ye tıkladıktan sonra sihirbaz, oluşturacağı saklı yordam için bir ad sağlamamızı ister. Yeni saklı yordamı Products_SelectWithPriceQuartile adlandırın ve İleri'ye tıklayın.

Stored Procedure'a Products_SelectWithPriceQuartile adını verin

Şekil 5: Saklı Yordamı Products_SelectWithPriceQuartile Adlandırın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Son olarak TableAdapter yöntemlerini adlandırmamız istenir. Hem DataTable Doldur hem de DataTable Döndür onay kutularını işaretli bırakın ve yöntemlerini FillWithPriceQuartile ve GetProductsWithPriceQuartileolarak adlandırın.

TableAdapter Yöntemlerini Adlandırın ve Son'a Tıklayın

Şekil 6: TableAdapter Yöntemlerini Adlandırın ve Son'a Tıklayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Belirtilen SELECT sorgu ile saklı yordam ve TableAdapter yöntemlerini adlandırdıktan sonra sihirbazı tamamlamak için Bitir'e tıklayın. Bu noktada sihirbazdan SQL yapısının veya deyiminin desteklenmediğini belirten OVER bir veya iki uyarı alabilirsiniz. Bu uyarılar göz ardı edilebilir.

Sihirbazı tamamladıktan sonra, TableAdapter FillWithPriceQuartile ve GetProductsWithPriceQuartile yöntemlerini içermeli ve veritabanı Products_SelectWithPriceQuartile adlı bir saklı yordam içermelidir. TableAdapter'ın gerçekten bu yeni yöntemi içerdiğini ve saklı yordamın veritabanına doğru şekilde eklendiğini doğrulamak için bir dakikanızı ayırın. Veritabanını denetlerken saklı yordamı görmüyorsanız Saklı Yordamlar klasörüne sağ tıklayıp Yenile'yi seçmeyi deneyin.

TableAdapter'a Yeni Bir Yöntem Eklendiğini doğrulayın

Şekil 7: TableAdapter'a Yeni Bir Yöntem Eklendiğini Doğrulama

Veritabanının, Products_SelectWithPriceQuartile saklı yordamını içerdiğinden emin olun

Şekil 8: Veritabanının Saklı Yordamı İçerdiğinden Products_SelectWithPriceQuartile Emin Olun (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Uyarı

Geçici SQL deyimleri yerine saklı yordamları kullanmanın avantajlarından biri, TableAdapter Yapılandırma sihirbazının yeniden çalıştırılmasının saklı yordamlar sütun listelerini değiştirmemesidir. TableAdapter'a sağ tıklayarak, sihirbazı başlatmak için bağlam menüsünden Yapılandır seçeneğini belirleyerek ve ardından tamamlamak için Son'a tıklayarak bunu doğrulayın. Ardından veritabanına gidin ve Products_SelectWithPriceQuartile saklı yordamı görüntüleyin. Sütun listesinin değiştirilmediğini unutmayın. Geçici ad-hoc SQL ifadelerini kullansaydık, TableAdapter Yapılandırma sihirbazı yeniden çalıştırıldığında, bu sorgunun sütun listesi ana sorgu sütun listesiyle eşleşecek şekilde geri yüklenir ve böylece GetProductsWithPriceQuartile yöntemi tarafından kullanılan sorgudan NTILE ifadesi kaldırılırdı.

Veri Erişim Katmanı'nın GetProductsWithPriceQuartile yöntemi çağrıldığında, TableAdapter Products_SelectWithPriceQuartile saklı yordamını çalıştırır ve döndürülen her kayıt için ProductsDataTable'ye bir satır ekler. Saklı yordam tarafından döndürülen veri alanları, ProductsDataTable s sütunlarına eşlenir. Saklı yordamdan döndürülen bir PriceQuartile veri alanı olduğundan, değeri ProductsDataTable s PriceQuartile sütununa atanır.

Sorguları veri alanı döndürmeyen PriceQuartile TableAdapter yöntemleri için PriceQuartile sütununun değeri, DefaultValue özelliği tarafından belirtilen değerdir. Şekil 2'de gösterildiği gibi, bu değer varsayılan olarak ayarlanır DBNull. Farklı bir varsayılan değer tercih ederseniz, özelliği buna göre ayarlamanız DefaultValue yeterlidir. Sadece DefaultValue sütunu için DataType (yani System.Int32) verilen sütunlarda PriceQuartile değerinin geçerli olduğundan emin olun.

Bu noktada, DataTable'a ek sütun eklemek için gerekli adımları gerçekleştirdik. Bu ek sütunun beklendiği gibi çalıştığını doğrulamak için, her ürünün adını, fiyatını ve fiyat dörtte birini görüntüleyen bir ASP.NET sayfası oluşturalım. Ancak bunu gerçekleştirmeden önce İş Mantığı Katmanı'nı DAL GetProductsWithPriceQuartile yöntemine çağıran bir yöntem içerecek şekilde güncelleştirmemiz gerekir. 3. Adımda BLL'yi güncelleştirecek ve ardından 4. Adımda ASP.NET sayfasını oluşturacağız.

3. Adım: İş Mantığı Katmanını Artırma

Sunu Katmanı'ndan yeni GetProductsWithPriceQuartile yöntemi kullanmadan önce BLL'ye karşılık gelen bir yöntem eklemeliyiz. ProductsBLLWithSprocs Sınıf dosyasını açın ve aşağıdaki kodu ekleyin:

<System.ComponentModel.DataObjectMethodAttribute_
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetProductsWithPriceQuartile() As NorthwindWithSprocs.ProductsDataTable
    Return Adapter.GetProductsWithPriceQuartile()
End Function

yöntemi, içindeki ProductsBLLWithSprocsGetProductsWithPriceQuartile diğer veri alma yöntemleri gibi DAL'nin ilgili GetProductsWithPriceQuartile yöntemini çağırır ve sonuçlarını döndürür.

4. Adım: ASP.NET Web Sayfasında Fiyat Çeyrek Dilim Bilgilerini Görüntüleme

BLL ekleme tamamlandıktan sonra her ürün için fiyat dörttebirlik değerini gösteren bir ASP.NET sayfası oluşturmaya hazırız. AddingColumns.aspx klasöründeki AdvancedDAL sayfasını açın ve Toolbox'tan bir GridView'ı Tasarımcı'ya sürükleyin, ardından ID özelliğini Products olarak ayarlayın. GridView'un akıllı etiketinden bunu adlı ProductsDataSourceyeni bir ObjectDataSource'a bağlayın. ProductsBLLWithSprocs sınıfını, GetProductsWithPriceQuartile yöntemini kullanacak şekilde ObjectDataSource'ı yapılandırın. Bu salt okunur bir tablo olacağından, UPDATE, INSERT ve DELETE sekmelerindeki açılan listeleri (Yok) olarak ayarlayın.

ObjectDataSource'ı ProductsBLLWithSprocs Sınıfını Kullanacak Şekilde Yapılandırma

Şekil 9: ObjectDataSource'ı Sınıfı Kullanacak ProductsBLLWithSprocs Şekilde Yapılandırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

GetProductsWithPriceQuartile Yönteminden Ürün Bilgilerini Alma

Şekil 10: Yöntemden GetProductsWithPriceQuartile Ürün Bilgilerini Alma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Veri Kaynağını Yapılandırma sihirbazını tamamladıktan sonra Visual Studio, yöntemi tarafından döndürülen her veri alanı için GridView'a otomatik olarak bir BoundField veya CheckBoxField ekler. Bu veri alanlarından biri PriceQuartile olup, 1. adımda ProductsDataTable öğesine eklediğimiz sütundur.

GridView alanlarını düzenleyerek, ProductName, UnitPrice ve PriceQuartile BoundField'ler dışındaki tüm alanları kaldırın. UnitPrice BoundField'i, değerini bir para birimi olarak biçimlendirmek ve UnitPrice ve PriceQuartile BoundField'leri sırasıyla sağa ve ortaya hizalamak üzere yapılandırın. Son olarak, kalan BoundFields HeaderText özelliklerini sırasıyla Product, Price ve Price Quartile olarak güncelleştirin. Ayrıca GridView akıllı etiketinden Sıralamayı Etkinleştir onay kutusunu işaretleyin.

Bu değişikliklerden sonra GridView ve ObjectDataSource bildirim temelli işaretleme aşağıdaki gibi görünmelidir:

<asp:GridView ID="Products" runat="server" AllowSorting="True"
    AutoGenerateColumns="False" DataKeyNames="ProductID" 
    DataSourceID="ProductsDataSource">
    <Columns>
        <asp:BoundField DataField="ProductName" HeaderText="Product" 
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" 
            HeaderText="Price" HtmlEncode="False" 
            SortExpression="UnitPrice">
            <ItemStyle HorizontalAlign="Right" />
        </asp:BoundField>
        <asp:BoundField DataField="PriceQuartile" HeaderText="Price Quartile" 
            SortExpression="PriceQuartile">
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server" 
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetProductsWithPriceQuartile" 
    TypeName="ProductsBLLWithSprocs">
</asp:ObjectDataSource>

Şekil 11'de tarayıcı üzerinden ziyaret edildiğinde bu sayfa gösterilmektedir. Başlangıçta, ürünlerin her ürüne uygun PriceQuartile bir değer atanmış olarak azalan düzende fiyatlarına göre sıralandığını unutmayın. Elbette bu veriler, fiyat açısından ürünün derecelendirmesini yansıtan Fiyat Dörttebirliği sütun değeriyle diğer ölçütlere göre sıralanabilir (bkz. Şekil 12).

Ürünler Fiyatlarına Göre Sipariş Edilir

Şekil 11: Ürünler Fiyatlarına Göre Sıralanır (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Ürünler Adlarına Göre Sıralanır

Şekil 12: Ürünler Adlarına Göre Sıralanır (Tam boyutlu resmi görüntülemek için tıklayın)

Uyarı

Birkaç kod satırıyla GridView'u ürün satırlarını değerlerine PriceQuartile göre renklendirmesi için genişletebiliriz. Bu ürünleri ilk dörttebirde açık yeşil, ikinci dörttebirindekileri açık sarı ve benzeri renklerle renklendirebiliriz. Bu işlevi eklemek için bir dakikanızı ayırın. GridView'ı biçimlendirme konusunda bir yenileyiciye ihtiyacınız varsa Verilere Dayalı Özel Biçimlendirme öğreticisine başvurun.

Alternatif Yaklaşım - Başka Bir TableAdapter Oluşturma

Bu öğreticide gördüğümüz gibi, bir TableAdapter'a ana sorgu tarafından yazılmış olanlar dışında veri alanları döndüren bir yöntem eklerken, DataTable'a karşılık gelen sütunları ekleyebiliriz. Ancak böyle bir yaklaşım yalnızca TableAdapter'da farklı veri alanları döndüren az sayıda yöntem varsa ve bu alternatif veri alanları ana sorgudan çok fazla farklılık göstermiyorsa iyi sonuç verir.

DataTable'a sütun eklemek yerine, dataset'e farklı veri alanları döndüren ilk TableAdapter'dan yöntemleri içeren başka bir TableAdapter ekleyebilirsiniz. Bu öğreticide, PriceQuartile sütununu ProductsDataTable öğesine eklemek yerine (bu sütun yalnızca GetProductsWithPriceQuartile yöntemi tarafından kullanılır), ana sorgusu ProductsWithPriceQuartileTableAdapter saklı yordamı olan Products_SelectWithPriceQuartile adında başka bir TableAdapter'ı DataSet'e ekleyebilirdik. Fiyat dörttebirlik dilimiyle ürün bilgilerini alması gereken ASP.NET sayfaları ProductsWithPriceQuartileTableAdapter kullanırken, buna ihtiyaç duymayanlar ProductsTableAdapter kullanmaya devam edebilir.

Yeni bir TableAdapter ekleyerek DataTable'lar bozulmadan kalır ve sütunları TableAdapter'ın yöntemleri tarafından döndürülen veri alanlarını tam olarak yansıtır. Ancak, ek TableAdapters tekrarlayan görevler ve işlevler oluşturabilir. Örneğin, PriceQuartile sütununu görüntüleyen bu ASP.NET sayfalarının ekleme, güncelleştirme ve silme desteği sağlaması gerekiyorsa, ProductsWithPriceQuartileTableAdapter öğesinin InsertCommand, UpdateCommand ve DeleteCommand özelliklerinin düzgün yapılandırılması gerekir. Bu özellikler ProductsTableAdapter S'leri yansıtsa da, bu yapılandırma ek bir adım gerektirir. Ayrıca, artık ProductsTableAdapter ve ProductsWithPriceQuartileTableAdapter sınıfları aracılığıyla veritabanına bir ürünü güncelleştirmenin, silmenin veya eklemenin iki yolu vardır.

Bu öğretici ile birlikte gelen indirme, DataSet'teki ProductsWithPriceQuartileTableAdapter alternatif yaklaşımı gösteren bir NorthwindWithSprocs sınıfı içerir.

Özet

Çoğu senaryoda, TableAdapter'daki tüm yöntemler aynı veri alanı kümesini döndürür, ancak belirli bir veya iki yöntemin ek alan döndürmesi gerekebileceği zamanlar vardır. Örneğin, Ana Kayıtların Madde İşaretli Listesini Kullanarak Ana/Ayrıntı Veri Listesi öğreticisinde, ana sorgunun veri alanlarına ek olarak, her kategoriye bağlı ürün sayısını bildiren bir CategoriesTableAdapter alanı döndüren bir yöntemi NumberOfProducts 'e ekledik. Bu öğreticide, ana sorgunun veri alanlarına ek olarak bir ProductsTableAdapter alanı döndüren bir yöntem eklemeyi PriceQuartile içinde inceledik. TableAdapter yöntemleri tarafından döndürülen ek veri alanlarını yakalamak için DataTable'a karşılık gelen sütunları eklememiz gerekir.

DataTable'a el ile sütun eklemeyi planlıyorsanız TableAdapter'ın saklı yordamları kullanması önerilir. TableAdapter geçici SQL deyimleri kullanıyorsa, TableAdapter Yapılandırma sihirbazı her çalıştırıldığında tüm yöntem veri alanı listeleri ana sorgu tarafından döndürülen veri alanlarına geri döner. Bu sorun saklı yordamları etkilemez. Bu yüzden bunlar önerilir ve bu öğreticide kullanıldılar.

Mutlu Programlama!

Yazar Hakkında

Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışı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 eğitim serisi, birçok yararlı kişi tarafından incelendi. Bu öğreticinin baş gözden geçirenleri Randy Schmidt, Jacky Goor, Bernadette Leigh ve Hilton Giesenow'dır. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, mitchell@4GuysFromRolla.com'a bir mesaj bırakın.