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.

MS SQL Server 2008 konfiguracija za remote connection


Zadnji dana bilo mi je potrebno da podesim SQL Server 2008 za konekciju sa drugog računara u mreži. SQL Server 2005 sam bezbroj puta podesio za remote connection koristeći konfiguracijski alat „SQL Server Surface Area Configuration“. Medjutim, u novoj verziji SQL Servera 2008 ovaj alat ne postoji, a podešavanje za remote connection za SQL Sever 2008 na prvi pogled mi je predstavljao problem, obzirom da nisam profesionalac u administriranju SQL Servera. Prije nego što pojasnim konfiguraciju SQL Servera 2008 za remote connection, prikazat ću kako se to radi standardno za SQL Server 2005.

Svaka instalacija SQL Servera (2005 ili 2008) po dafaultu je podešena samo za lokalnu konekciju. To znači da bez prethodnog podešavanja nije moguće pristupiti bazi podataka sa nekog drugog računara u mreži. Ovo je čisto iz sigurnosnih razloga. Da bi omogućili povezivanje na SQL Server sa drugog računara potrebno je na računaru na kojem se instaliran SQL Server podesiti nekoliko stvari i to:

1. Uključiti mrežne protokole za SQL Server (TCP, Named Pipes)

2. Podesiti port preko kojeg će se vršiti razmjena podataka sa SQL Serverom (ili ostaviti standardni port preko kojeg SQL Server komunicira a to je 1433)

3. U Windows Firewallu manuelno napraviti izuzetak za port 1433

Uz SQL Serveru 2005 dolazi poseban alat za konfiguraciju remote connection a to je SQL Server Surface Area Configuration.

Podešavanje Remote Connection za SQL Server 2005

clip_image002

clip_image004

Pokretanje opcije „Surface Area Configuration for Service and Connections“ dobijamo prozor za podešavanje SQL Servera za remote connection.

clip_image006

Sa lijeve strane odaberemo stavku „Remote Connections“, a sa desne strane prozora pikazuje nam se da li je Server podešen samo za lokalne konekcije odnosno Lokalno i remote connection (udaljene konekcije). Podesimo konekciju kao na slici. Kada se podesi konekcija potrebno je restartovati servis da bi promjene bile aktualizirane.

Pored konekcije potrebno je podesiti i SQL Browser. SQL Browser je servis koji obezbjedjuje konekciju na SQL Server. Naime SQL Browser omogućuje da se na jednom računaru mogu instalirati više instanci SQL Servera i da se SQL Serveru pristupa preko naziva instance. Podešavanje SQL Browsera vršimo preko stavke SQL Server Browser.

clip_image008

Sa ovim smo završili podešavanje SQL Servera 2005 za remote connection. Potrebno je sada da se u Windows Firewall-u napravi izuzetak za port 1433 koji je defaultni port za SQL Server.

Otvorimo Windows Firewall kao na slici:

clip_image009

Klikom na dugme Add Port… popunimo dijaloški okvir kao na donjoj slici te klikenmo na dugme OK.

clip_image011

Ovim je podešavanje završeno.

Podešavanje SQL Server 2008 za remote connection

Obzirom da gornji alat ne postoji za podešavanje remote connection za SQL Server 2008 podešavanje se vrši na više klasični način. Važno je napomenuti da procedura koja će biti navedena moguće je podesiti i remote connection i za SQL Server 2005. Podešavanje remote connection vršimo sa drugim alatom kmoji dolazi uz instalaciju SQL Servera 2005 i 2008 a to je SQL Server Configuration Manager.

clip_image012

Na gornjoj slici vidimo da su protokoli za remote conenction (TCP/IP i Named Pipes) isključeno. Da bi podesili remote connection potrebno je ove potokole uključiti. Da bi uključili TPC/IP protokol potrebno je desnim klikom na stavku izabrati Enable iz iskačućeg menija.

Ako želimo da podesimo port potrebno je odabrati opciju „Properties“ U stavci IPApp dijaloga unesemo broj porta.

clip_image014

Obzirom da kroz ovaj tutorijal koristimo defaultni port 1433 nije ga potrebno posebno specifirati.

Na isti način kao i kod SQL Servera 2005 potrebno je napraviti izuzetak u Windows Firewall-a za port 1433.

Na ovaj nači podešavanje SQL Servera 2008 za remote connecton je završeno.