LinQ to SQL – Tagalized!

Magandang araw! Ito ang una sa ilang mga blogs ko tungkol sa isa sa mga pinakabagong ilalabas na teknolohiyang kung tawagin ay LinQ o Language Integrated Query.

Ang LinQ ay isang bagong paraan para magsulat ng code para kumuha, mamili at ipamahagi ang data sa inyong ginagawang application. Ito ay kasama sa pinakabagong framework Visual Studio.Net na framework 3.5. Ang framework na ito ay kasamang mabibili ng Visual Studio.Net 2008.

Para magamit ang LinQ ang namespace na tatawagin ay System.Data.Linq.

Kasamang gagamitin ng LinQ ang isa pang bagong paraan ng pagkuha ng data, ang tinatawag na ORMapper (Object Relational Mapper) at ito ay kasama rin sa VS2008.

Ngayon ay gagawa ako ng isang simpleng website, na may isang Gridview at lalagyan natin ito ng data mula sa Northwind database. Para sa blog na ito, gagamit ako ng SQL Server 2005 para ipakita ang ilang mga pili at pinakagamit na mga query gamit ang LinQ at SQL Server.

Simple lang naman ang paraan para maipakita ang paggamit ng LinQ.

1. Ihanda ang inyong application o website. Para dito ang aking gagamitin ay C# at Visual Studio 2008. isang simpleng webapge lang na may datagrid ang aking gagamitin.

2. Ihanda ang Northwind database. Para dito ang aking gagamitin ay SQL Server2005.

3. Gumawa ng isang ORmapper na tatawagin nating NorthwindDataContext. Ang isang Datacontext ay isang paglarawan ng data bilang Object o Collection sa VS2008. Dito ay mapupuna na sa VS2008, ang Data ay itatrato bilang mga Object.

4. Maglagay ng isang tinatawag na Linq to SQL class.

5. Gamitin ang LinQ upang kumuha at pumili ng data na ilalagay sa Gridview.

Simulan natin sa paggawa ng isang bagong website sa VS2008.

image

Mapapansin nyo sa baba ang isa pang bagong abilidad ng VS2008, ang Design/Split/Source na uri ng pagtingin sa inyong page. Sa Split-View ay sabay na makikita ang HTML at itsura ng inyong page.

Magdagdag ng isang Gridview

image

nilagyan ko ng formatting ang gridview. "Simple" ang napili kong format.

Ngayon ay maglalagay ako ng tinatawag na Linq to SQL class para magkaroon ng ORMapper ang aking website. I right-click ang applicaiton, at piliin ang Add New Item. Lalabas ang Add New Item dialog at piliin ang LinQ to SQL Class. Pangalanang "Northwind" ang class at i-click ang Add. Kung magtatanong ang VS2008 na ilagay ang ating gagawing datacontext sa App_Code folder, sagutin ito ng oo sa pamamagitan ng pag-click ng OK.

image

Ngayon ay makikita na ang ating ORMapper na ang pangalan ay Northwind. Ang pangalang NorthwindDatacontext ay kusang ilalagay ng VS.Net at makikita ito sa Properties Explorer.

image

Mula sa Server Explorer, i drag/drop ang Products at Categories table. Makikita ang tinatawag na Mapping ng relationship ng mga tables na ito at ito ay ipapakita bilang mga classes.

image

I-save ang website at pumunta sa code window para sa Default.aspx.cs

Sa tunay na buhay, ang LinQ code natin ay malamang mapunta sa ating Business Logic Layer o Business Tier. Ngunit para sa blog na ito ay ilalagay natin ng diretso sa page ang ating code.

Sa loob ng Page_Load na event, ilagay ang code na ito:

NorthwindDataContext myDB = new NorthwindDataContext();
var queryKO = from p in myDB.Products
              select p;
GridView1.DataSource = queryKO;
GridView1.DataBind();

Ito ang pinakapayak na query na ating magagamit.

Patakbuhin ang application:

image

Minsan naman, ay hindi maaring ilabas natin ang lahat ng data kaya’t kailangan nating piliin ito. Sa kasong ganito, halimbawa ay ang gusto ko lang ilabas ay ang pangalan ng lahat ng mga produktong nasa ilalim ng kategoryang "Beverages" na 2 ang category ID sa Products table. baguhin ang query upang maging:

var queryKO = from p in myDB.Products
                      where p.CategoryID == 2
                      select new
                      {
                          p.ProductName,
                          p.CategoryID
                      };

Dito ay mapapansin ang ilang mga bagay:

1. Kahawig ng LinQ syntax ang syntax ng SQL. Ito ay sadyang ginawang magkahawig para mas madaling matutunan ang syntax ng LinQ lalo na para sa mga developers na may kaalaman na rin ng SQL.

2. Ang salitang var ay ginamit pang-declare ng variable na queryKO. Ang bagong syntax na ito ay ginawa upang mapakinabangan ang tinatawag na Type Inferencing kung saan ang Compiler na ang magdedesisyon kung ano ang magiging DataType ng variable na queryKO.

3. Ang "==" ay syntax ng C#. ito ay maaring mangyari dahil ang LinQ ay KASAMA na sa C# at hindi ipinatong lamang o tinatawag lamang. Hindi lang sa C# kasama ang LinQ, pati na rin sa lahat ng mga methods na kasama sa Framework 3.5. Halimbawa, baguhin ang linyang where p.CategoryID == 2 at gawin itong where p.ProductName.Startswith("c") ang StartsWith ay gumagana rin sa LinQ.

Sa ating huling ginawang pagbabago, mas maganda kung ang ating ipapakita sa Gridview ay ang CategoryName at hindi CategoryID lang. Para magawa ito, hindi na natin kailangang maglagay pa ng INNER JOIN sa LinQ dahil ang relasyon ng dalawang tables na ginamit natin, ay naroon na sa loob ng ating DataContext. kayat ang ating babaguhin lamang ay ganito:

var queryKO = from p in myDB.Products
                      where p.CategoryID == 2
                      select new
                      {
                          p.ProductName,
                          p.Category.CategoryName
                      };

Patakbuhin ang application para makita ang resulta.

Maari rin nating isipin kung ano talaga ang nangyayari o ginagawa ng computer at compiler para matupad ang mga command ng LinQ. Sa paggamit ng LinQ, mas nagiging Declarative ang ating pag-kuha ng data. Ang declarative ang kabaliktaran ng Imperative. Sa Imperative, ating sinasabi sa program kung paano gagawin ang isang bagay tulad ng pagkuha at pagpili ng data. dati, ito ay ginagawa sa paggamit ng mga tinatawag na LOOP. Sa Declarative naman, ang sinasabi lang natin ay kung ano ang gagawin at hindi kung paano. Sasabihin natin, sa pamamagitan ng LinQ na kukuha tayo at pipili ng data at ang LinQ na ang magdedsisyon kung PAANO kukuhanin at pipiliin ang data sa pamamagitan ng maggawa ng isang SQL Query.

Makikita ang SQL Query ng LinQ sa queryKO. Lagyan ng breakpoint sa linya ng

Gridview1.Databind();

at tignan muna ang laman ng variable na queryKO bago tuluyang patakbuhin ang application. ito ang resulta ng ginamit kong LinQ statement:

queryKO = {SELECT [t0].[ProductName], [t1].[CategoryName]
FROM [dbo].[Products] AS [t0]
LEFT OUTER JOIN [dbo].[Categories] AS [t1] ON [t1].[CategoryID] = [t0].[CategoryID]
WHERE [t0].[CategoryID] = @p0
}

 

Ang sql statement na ito ay maari pa ring baguhin para umayon sa pangangalingan ngunit sa aking palagay ay 99% ng mga pagkakataon ay husto na ang ganitong SQLQuery. mapapansin din ang @p0 sa statement na ginawa ng LinQ. Ito ay patunay na ang SQL Statement na ginagawa ng LinQ ay tinatawag na parameterized query. Ito ay nangangahulugang ligtas ang SQL Statement na ginagawa ng LinQ mula sa tinatawag na SQL Injection.

Sa pagtatapos, ilalahad ko na ang resulta ng var declaration sa halimbawang ito ay hindi variant ngunit isang miyembro ng IEnumerable. Maaring ilagay ang LinQ statement sa isang Public na class at i-expose ang resulta ng query bilang IEnumerable.

Ang isa pang bagay na magandang malaman, ang mismong pagkuha ng LinQ ng data ay nangyayari sa linyang GridView1.Databind(). Sa kaalamang ito, isiping ang application ay may dalawang Gridview, dalawang beses kailangang tawagin ang Databind method. Kung sa pagitan ng dalawang pagtawag na ito, ang Data ay nagbago, maaring madagdagan o nabawasan, ang pinakabagong data ang maikakarga sa ikalawang GridView.

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

6 Responses to LinQ to SQL – Tagalized!

  1. Chester says:

    Maganda! Magaling!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s