BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

LINQ su SQL (2 dalis)

Parašė Sergejus | 2007-08-31 07:42

Po tam tikrų problemų su Interneto ryšiu, vėl grįžtu prie LINQ su SQL aptarimo.

Praeitą kartą aš aptariau pradinį žingsnį, kaip pagal duomenų bazės struktūrą sugeneruoti lenteles su visais sąryšiais, o šiandien parodysiu keletą pavyzdžių kaip naudojantis LINQ su SQL duomenų atnaujinimui, kurimui ir trinimui. Pirmasis pavyzdys yra paprasčiausias select sakinys su where sąlyga ir rūšiavimu:

Įrašo atnaujinimas atrodytų taip:

Pagrindinis “stebuklas” atnaujinant įrašą įvyksta kviečiant metodą SubmitChanges(), kuris ir sugeneruoja Update sakinį(-ius).

Dabar parodysiu kaip galima sukurti naują kategoriją “Mano kategorija”, du naujus produktus ir visą tai susieti tarpusavyje:

Dar vienas pavyzdys demonstruoja ką tik pridėtos kategorijos trinimą

Svarbu tai, kad LINQ su SQL moka dirbti ir su išsaugotomis procedūromis bei funkcijomis. Norint jomis pasinaudoti, kaip ir lentelių atveju reikia jas pertempti iš Server Explorer lango į dizainerio langą. Nemažiau svarbu ir tai, kad visus pavadinimus galima keisti, taip išsaugotai procedūrai Top_Most_Expensive_Products galima suteikti pavadinimą TopMostExpensiveProducts

Pačios išsaugotos procedūros kvietinys atrodytų taip:

Tiek šiam kartui, kai tik išsispręs problemos su Interneto ryšiu, bus daugiau straipsnių iš LINQ su SQL ciklo.

Rodyk draugams

LINQ su SQL (1 dalis)

Parašė Sergejus | 2007-08-28 22:22

Iki šiol aš nemažai dėmesio skyriau LINQ technologijos ir jos panaudojimo su objektais ir XML apžvalgai. Šiandien pradedu naują straipsnių ciklą, skirtą LINQ su SQL technologijai. LINQ su SQL - tai objektinio-reliacinio susiejimo (ORM) realizacija, kuri prieinama kartu su .NET Framework 3.5. LINQ su SQL paskirtis - modeliuoti reliacinę duomenų bazę .NET klasių pagalba. Naudojant LINQ, galima lengvai rašyti užklausas duomenų bazei, vykdyti insert ir update sakinius bei kviesti išsaugotas procedūras ir funkcijas.

Tam, kad pradėti naudotis LINQ su SQL, reikia į projektą įtraukti DBML failą, susietą su reikiama duomenų baze (kaip pavyzdį naudosiu Northwind duomenų bazę). DBML failas (DataBase Modeling Language, duomenų bazių modeliavimo kalba) iš tiesių yra failų rinkinys, sudarytas iš sąsajų aprašymų ir dizainerio failo.

Naudojantis Server Explorer langu…

…pertempiame keletą lentelių į dizainerio langą

Kaip matyti, rezultate turime klasių diagramą. Pavyzdyje pavaizduotos dvi klasės: Product ir Category, kurių savybės sutampa su lentelių stulpeliais. Vienas klasės objektas atitinka vieną lentelės eilutę, todėl, pavyzdžiui, kategorijų sąrašas atitinką Category lentelę. Rodyklytė rodo sąryšį tarp dviejų klasių, kas atitinka pirminio/išorinio raktų sąryšius. Mūsų atveju tai yra vienas su daug ryšis. Remiantis tokiais ryšiais, klasei kategorijos bus sugeneruota savybė Products, kuri bus skirta priėjimui prie visų tai kategorijai priklausančių produktų.

Išsaugojus DBML failą, bus sugeneruotos trys klasės Product, Category ir NorthwindDataContext

NorthwindDataContext klasė - tai tarsi Northwind duomenų bazės reprezentacija, su visomis naudojamomis lentelėmis, vaizdais, išsaugotomis procedūromis ir funkcijomis. Pavyzdžiui matyti, kad mūsų atveju NorthwindDataContext klasė leidžia operuoti lentelėmis Products ir Category bei turi metodus duomenų atnaujinimui ir trinimui

Paprasčiausia LINQ užklausa Northwind duomenų bazei atrodytų taip:

Taigi tiek šiam kartui, kitoje dalyje detaliau aptarsime LINQ užklausas ir išsaugotas procedūras.

Rodyk draugams

C# 3.0 naujų galimybių specifikacija

Parašė Sergejus | 2007-08-26 13:01

Praėjo atostogos ir laikas grįžti prie savo blogo.

Prieš kurį laiką tapo prieinama C# 3.0 naujų galimybių specifikacija, todėl jeigu kam įdomu detaliau išnagrinėti C# 3.0, siūlyčiau ją pasiskaityti.

P.S. Atostogos Tunise tikrai fantastika :)

Rodyk draugams

Atostogos

Parašė Sergejus | 2007-08-16 18:43

Valio! Pagaliau atostogos. Nuo rytojaus aš išskrendu atostogauti, dėl to visą savaitę nebus jokių naujų straipsnių.

Rodyk draugams

join raktažodžio panaudojimas XLINQ

Parašė Sergejus | 2007-08-15 17:14

Kaip jau esu rašęs XLINQ įvade, naudojant šią technologiją labai paprasta operuoti lokaliais ir nutolusiais XML duomenimimis. Bet kas jeigu duomenis randasi ne viename, bet keliuose XML resursuose? Pavyzdžiui, mes turime du XML dokumentus su automobilių gamintojais ir modeliais:

Visą šią informaciją mums reikės patalpinti į žemiau aprašytą klasę Modelis

Iki šiol XML dokumentų apjungimo ir Modelis klasės užpildymas apjungtais duomenimis nebuvo triviali užduotis. Dabar, XLINQ technologijos dėka, tai padaryti galima pasinaudojus raktažodžiu join. Apjungimo principas yra labai paprastas, pagal GamintojoID reikšmę iš Modeliai.xml, mes nuskaitome gamintojo pavadinimą iš Gamintojai.xml ir gauta informacija užpildome modelio objektą. Metodas, kuris grąžina užpildytą modelių sąrašą atrodys taip:

Trumpai apie patį metodą:

  • kaip ir ankstesniame XLINQ pavyzdyje, pirma reikia nuskaityti pačius XML duomenis
  • toliau vykdoma pati XLINQ užklausą, kuri nusako gamintojų ir modelių apjungimą pagal gamintojo atributo id ir modelio elemento GamintojoID reikšmes
  • inicializuojant objektą Modelis duomenimis, naudojamas anksčiau aprašytas praplėtimo metodas ToInt32, kuris grąžina skaičių Int32 (int) formatu

Pasinaudojus aprašytu GautiModelius metodu, labai paprastai galima parodyti gamintojus ir modelius išsiskleidžiamame sąraše:

Tiek šiam kartui ir laukiu jūsų atsiliepimų.

Rodyk draugams

Kaip gauti vartotojiškų SQL išsaugotų procedūrų sąrašą

Parašė Sergejus | 2007-08-14 19:51

Šiandien susiduriau su viena įdomia problema: reikėjo gauti visą vartotojiškų SQL išsaugotų procedūrų sąrašą, bet daugeliui gerai žinomas SQL sakinys nedavė laukiamų rezultatų:

Šalia vartotojiškų, sąraše buvo ir sisteminės išsaugotos procedūros, skirtos darbui su diagramomis

Taigi tam, kad gauti laukiamus rezultatus, pradinę užklausą reikėjo modifikuoti tokiu būdu:

Tikiuosi jums tai sutaupys porą paieškos valandų.

Rodyk draugams

LINQ su XML (XLINQ)

Parašė Sergejus | 2007-08-13 20:05

Aš jau esu rašęs apie vieną didžiausių .NET Framework 3.5 naujovių - LINQ, šiandien aptarsiu kitą LINQ technologijos panaudojimą: LINQ su XML, arba tiesiog XLINQ. Kaip ir galima nuspėti, XLINQ leidžia operuoti XML dokumentais naudojant standartinę LINQ sintaksę (select, from, where, …). Kaip pavyzdį naudosiu savo blogo RSS XML dokumentą, kuris atrodo tokiu būdu:

Norint vykdyti LINQ tipo užklausas nurodytam dokumentui, pirma jį reikia nuskaityti, tam naudojama nauja klasė XDocument iš System.Xml.Linq vardų srities.

Kaip matyti iš pavyzdžio, kai XML dokumentas pakrautas į atmintį, toliau juo operuojama LINQ užklausomis. Verta atkreipti dėmesį į keletą dalykų:

  • kelias nustatomas naudojant MapPath metodą, kadangi visas kodas skirtas veikti ASP.NET puslapyje
  • dokumentas.Descendants(”item”) grąžina visus elementus item, kas atitinka XPath išraišką //item
  • irasas.Element(”title”).Value grąžins title elemento tekstinę reikšmę
  • savybė Data bus DateTime tipo.

Vykdant tokią XLINQ užklausą rezultate turėsime sąrašą anoniminių objektų. Jeigu norime parašyti metodą, grąžinantį minėtą objektų kolekciją, reikės apibrėžti klasę, kuri atrodys tokiu būdu:

Modifikuota išraiška skiriasi nuo origalios minimaliai:

XDocument klasė turi vieną labai naudingą galimybę, Load metodas gali nuskaityti XML dokumenta ne tik iš lokalaus resurso, bet ir iš nutolusio. Pavyzdžiui, įrašus galima nuskaityti tiesiogiai iš mano RSS http://blogas.lt/rss.php?w=sergejus:

Patogu ir tai, kad XLINQ ir LINQ užklausas galima naudoti kartu. Pavyzdžiui, galima apibrėžti metodą, kuris grąžins tik straipsnius, kurių pavadinime figūruoja nurodytas žodis:

XLINQ yra labai galinga technologija, kurios dėka elementariausią RSS skaitytuvą galima parašyti vos per 10 minučių.

Tiek šiam kartui, malonaus skaitymo ir nepamirškite apie kaip.tik.ten ir topix.lt žymes.

Rodyk draugams

Kodo fragmentų (snippets) saugykla

Parašė Sergejus | 2007-08-12 19:37

Prieš kurį laiką esu rašęs apie kodo fragmentų (snippets) panaudojimą. Šiandien netyčia atradau visai neblogą kodo fragmentų saugyklą, kur galima ne tik rasti daugumą naudingų kodo fragmentų, bet ir pasidalinti savuoju.

Rodyk draugams

Blogo šablono atnaujinimas 3

Parašė Sergejus | 2007-08-12 17:02

Valio, pagaliau išsprendžiau paskutinę savo blogo problemą - Visual Studio 2008 skaitliuko atvaizdavimo problemą. Papildomai, šalia kaip.tik.ten žymės pridėjau dar vieną digg stiliaus žymę topix.lt. Tikiuosi šių patobulinimų užteks kai kuriam laikui.

Rodyk draugams

Blogo šablono atnaujinimas 2

Parašė Sergejus | 2007-08-10 08:23

Prieš porą dienų esu atnaujinęs savo blogo šabloną, patogumui ir suderinamumui su Firefox pagerinti. Tačiau dar buvo keletas problemų, tarp kurių: “Skaitant konkretų įrašą su Firefox raidės yra didesnės nei turi būti”. Ši problema dabar jau yra išspręsta.

Kita naujovė, aš atsisakiau reitingavimo patiko/nepatiko, nes dauguma ir taip juo nesinaudojo, tačiau pridėjau lietuviško digg analogo kaip.tik.ten palaikymą.

Labai visų prašau, jeigu jums patiko straipsnis, nepagailėkite kelių sekundžių ir paspauskite kaip.tik.ten nuorodą. Kuo daugiau paspaudimų, tuo daugiau programuotojų sužinos apie šį blogą, tuo gausesnė mūsų .net bendruomenė bus.

Rodyk draugams