Prenos tabele kao argument storne procedure


Na koji način prenijeti tabelu sa podacima u stornu proceduru kao argument?!

Na ovo pitanje i nije baš lako odgovoriti jer se tabela konvencionalno ne može prenijeti kao argument u stornu proceduru. U tom smislu rješenja koja se nude su različita, i kreću se od toga da se tabela eksportuje u tekst, koji je odvojen karakterom za odvajanje, pa se onda kao varchar prenese u stornu proceduru. Poslije toga je potrebno taj isti text vratiti u privremenu tabelu te onda je koristiti. Ovaj postupak pored toga što je potrebno implementirati logiku vraćanja teksta u tabelu, ima mane limitiranja broja karaktera.

SQL Server 2005 posjeduje XML  data tip, koji pored mnogih korisnih prednosti ima mogućnost da se definiše kao argument u stornoj proceduri. Na ovaj način moguće je tabelu izvesti u xml i na taj način prenijeti podatke. Obzirom da je manipulacija sa xml-om podržana u SQL koristeći se standardnim operacijama i naredbama.

Kao ilustraciju navedenog problema prikazaćemo mali tutorijal na koji način to možemo postići. U biti formiraćemo .NET aplikaciju u VS 2008, formirati Typed DataSet u kojoj ćemo mapirati jednu tabelu koju treba prenijeti u stornu proceduru, te mapirati stornu proceduru koju smo formirali na sql serveru koja prima XML tip i vraća tabelu koja je prenešena XML u SP.

1. Otvorimo VS 2008, i formirajmo .NET aplikaciju kao na slici:

clip_image002

2. Nakon formiranja aplikacije formirajmo TypedDataSet i nazovimo ga DataSet1.xsd

clip_image004

Napomena: Kada formirate DatSet, potrebno je obrisati NameSpace: http://tempuri.org/DataSet2.xsd

image

3. U DataSet1 formirajmo DataTable i nazovimo je „Tabela“.

Napomena: Ako pratite tutorijal vrlo je važno da se imenuje DataSet i DataTable istim imenom kao i ovdje, jer SQL kod koji ćemo kasnije formiati bazira se na ovim imenima.

4. U DataSet1 formiramo tabelu bez Adaptera kao na sljedećoj slici:

clip_image006

clip_image008

5. Kada smo formirali tabelu i definisali tipove podataka koje treba da sadrži, sad smo u mogućnosti da napravimo stornu proceduru koja će kao argument prihvatati našu tabelu.

6. Otvorimo NorthWind bazu preko ServerExplorera, u koliko nemate NorthWind bazu uzmite bilo koju ili je skinite sa ms stranice. Formirajne novu stornu proceduru kao na slici:

clip_image010

7. Storna procedura izgleda kao na sljedećoj slici

clip_image012

U biti procedura sadrži kod za formiranje privremene tabele, te ekstraktovanje podataka iz XML-a. Kod ekstrakta podataka potrebno je paziti na nazive DataSeta, naziva tabele, kao i naziva kolona kao što je prikazano.

8. Odabirom “Save” dugmeta zapisujemo proceduru na server. U DataSet-u sada je potrebno proceduru mapirati da bi je mogli prikazati u našoj testnoj aplikaciji.

9. Formirajmo TableAdapter

clip_image014

10. Odaberimo Postojeću proceduru na serveru

clip_image016

11. Odaberimo proceduru koju smo formirali nedavno

clip_image018

12. Na kraju u našem DataSetu imamo dvije tabele. Jedna offline (koju ćemo prenijeti u SP) i druga tabela koja je mapirala našu proceduru.

13. Otvorimo Form1.cs i odvucimo i spustimo naše formirane tabele kao na slici:

clip_image020

14. Implementirajmo Form_Load događaj, te formirajmo dugme “Napuni tabelu iz SP” preko kojeg ćemo pozvati Stornu proceduru.

clip_image022

Napomena: Na gornjoj slici smo formirali metodu za učitavanje podataka u tabelu. Na isti način smo mogli koristiti bilo koju tabelu sa servera, stim što bi je tada napunili preko tableAdaptera iz baze podataka.

15. Implementacija događaja za dugme “Napuni tabelu iz SP” ima sljedeću formu:

clip_image024

Na ovaj način smo završli tutorijal. Potrebno ga je testirati. U koliko je tutorijal pravilno sproveden nakon pokretanja aplikacije, te klikom na dugme „Napuni tabelu iz SP“ dobijamo sljedeći izgled.

clip_image026

U biti formirali smo tabelu, napunili je podacima, prosljedili je u SP, a SP nam je vratila tu istu tabelu.

Izvorni kod sa implementacijom storne procedure može se skinuti sa ovog linka.

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for .NET. Likes .NET, Math, Mechanical Engineering, Evolutionary Algorithms, Blogging.

Posted on 16/09/2009, in .NET, C#, SQL and tagged , . Bookmark the permalink. Leave a comment.

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