LINQ Language Integrated Query Dille Bütünleştirilmiş Sorgu Bir Veri Tabanı Tablosundan Veri Gösterme Amaç: Bir veritabanındaki bilgileri LINQ aracılığı ile ekranda nasıl gösterebiliriz? Yazar: Oğuz Alpöge, Ekim 2008 Bu sunuştaki örnek yazılım şu kitaptan alınmıştır: ASP.NET 3.5 Unleashed, Stephen Walther, Sams Publishing, 2008 Kullanılan web sunucu ortamı, Microsoft.NET 3.5 Framework ortamıdır. Bu sunuşun yazarı, bu kitabın eğitimini yapmaktadır. DB WEB BROWSER WINDOW Web Browser Penceresi WEB SERVER Web Sunucu DATABASE SERVER Vertitabanı Sunucusu 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 1
Ekranda görünen GridView kontrolu: LINQ Language Integrated Query Dille Bütünleştirilmiş Sorgu Veritabanı Tablosundan Veri Gösterme Bilim üzerine filmler: DB GridView SQL Server Veritabanı: MyDatabase.mdf Movie Tablosu Fields Relationships Stored Procedures WEB BROWSER WINDOW Web Browser Penceresi WEB SERVER Web Sunucu DATABASE SERVER Vertitabanı Sunucusu 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 2
LINQ Language Integrated Query.NET 3.5 de LINQ ve Diğer Veri Erişimi Yöntemleri 1) SqlDataReader SqlCommand Select, Update, Insert, Delete 2) DataSet - DataAdapter SqlCommand DB GridView 3) SqlDataSource 4) ObjectDataSource - DAL Movie Class Data Access Layer Veri Erişim Katmani 5) LinqDataSource EDM Movie Class 6) ObjectDataSource - LINQ to SQL MyDatabase.mdf Movie Table Fields Relationships Stored Procedures.NET 3.5 2007 yılında LINQ yazılım tekniğini getirmistir. Böylece C# veya VB.NET içinden direk olarak veri tabanına sorgulama yapılabilmektedir. Iletişimi ve diger işlemleri.net Framework programımızdan ayrı olarak kendisi sağlamaktadır. 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 3
EDM ile ObjectDataSource Entity Data Model ObjectDataSource Movie Class Properties Methods Events DB GridView DAL Data Access Layer MyDatabase.mdf Movie Class Properties Methods Movie Table Fields Relationships Stored Procedures ASP.NET 2.0 da Movie class (sınıfı) elle yaratılırdı. ASP.NET 3.5 de ise Movie sınıfı grafik olarak Visual Studio 2008 tarafindan yaratılabiliyor. Field lerden Property, Stored Procedure lardan ise Method yaratılıyor. 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 4
LinqDataSource ASP.NET 3.5 Unleashed, Stephen Walther, sayfa 927, Chapter 18 Entity Properties Methods Events DB GridView MyDatabaseDataContext MyDatabase.mdf Movie Class Properties Methods Movie Table Fields Relationships Stored Procedures Movie sınıfı (class) bir kısmi sınıftır (partial class). Entity Data Model, EDM Wizard tarafindan otomatik olarak yaratılır (auto-generated). 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 5
LinqDataSource ASP.NET 3.5 Unleashed, Stephen Walther, sayfa 927, Chapter 18 Movie sınıfı (class) bir kısmi sınıftır (partial class). Entity Data Model, Wizard tarafindan otomatik olarak yaratılır (auto-generated). 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 6
Movie tablosu MyDatabase.mdf Veritabanı MovieCategory tablosu 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 7
EDM Entity Data Model Burada yaratılan EDM, veri tabanını temsil ediyor. 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 8
EDM in Yaratılması EDM in içine dahil edilmek için, burada veri tabanından tablolar ve Stored Procedure lar seçiliyor. 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 9
PartialMovie.aspx <asp:gridview id="grdmovies" grdmovies DataSourceID="srcMovies" Runat="server" /> public partial class Movie { public static IEnumerable<Movie> Select() { } MyDatabaseDataContext db = new MyDatabaseDataContext(); return db.movies; <asp:objectdatasource id="srcmovies" TypeName="Movie" SelectMethod="SelectByBoxOfficeTotals" runat="server" /> public static IEnumerable<Movie> SelectByBoxOfficeTotals() { return Select().OrderBy(m => m.boxofficetotals); } } public static IEnumerable<Movie> SelectTitleDirector() { MyDatabaseDataContext db = new MyDatabaseDataContext(); return db.movies.where(m => m.title.contains("d")); } 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 10
ShowLinqDataSource.aspx Walther, sayfa 927 <asp:gridview id="grd" DataSourceID="LinqDataSource1" Runat="server" /> <asp:label id="lblsearch" AssociatedControlID="txtSearch" Text="Search:" Runat="server" /> <asp:textbox id="txtsearch" Runat="server" /> <asp:button id="btnsearch" Text="Search" Runat="server" /> <asp:linqdatasource ID="LinqDataSource1" ContextTypeName="MyDatabaseDataContext" TableName="Movies" Where="Director == @Director" OrderBy="DateReleased" Select="new (Title, Director)" runat="server"> <whereparameters> <asp:controlparameter Name="Director" ControlID="txtSearch" PropertyName="Text" Type="String" /> </whereparameters> </asp:linqdatasource> 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 11
ListMoviesByBoxOffice.aspx Entity Properties Methods Events DB grd GridView MyDatabaseDataContext void Page_Load() { } MyDatabaseDataContext db = new MyDatabaseDataContext(); grd.datasource = db.movies.orderby (m => m.boxofficetotals); grd.databind(); <asp:gridview id="grd" runat="server" /> 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 12
ListMoviesByBoxOffice.aspx Sayfasının Görünüşü grd GridView Sayfa yüklenirken bu calışıyor: void Page_Load() { MyDatabaseDataContext db = new MyDatabaseDataContext(); } grd.datasource = grd.databind(); db.movies.orderby (m => m.boxofficetotals); 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 13
EditLinqDataSource.aspx DetailsView frmmovie GridView grdmovies LinqDataSource DB protected void { } grdmovies.databind(); frmmovie_iteminserted (object sender, DetailsViewInsertedEventArgs e) 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 14
EditLinqDatasource.aspx <asp:detailsview id="frmmovie" DataSourceID="srcMovies" DefaultMode="Insert" AutoGenerateRows="false" AutoGenerateInsertButton="true" Runat="server" OnItemInserted="frmMovie_ItemInserted"> <Fields> <asp:boundfield DataField="Title" HeaderText="Title" /> <asp:boundfield DataField="Director" HeaderText="Director" /> <asp:boundfield DataField="DateReleased" HeaderText="Date Released" /> </Fields> </asp:detailsview> <br /><br /> <asp:gridview id="grdmovies" DataKeyNames="Id" DataSourceID="srcMovies" AllowPaging="true" PageSize="5" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" Runat="server" /> <asp:linqdatasource id="srcmovies" ContextTypeName="MyDatabaseDataContext" TableName="Movies" OrderBy="Id descending" EnableInsert="true" EnableUpdate="true" EnableDelete="true" AutoPage="true" Runat="server" /> 10/4/2008 LINQ Data Source (c) 2008 Copyright Oğuz Alpöge, Next Information Systems 15