U ovom članku ćete naučiti šta je LINQ i kako se njime postavljaju upiti za liste.

Šta je LINQ? Language Integrated Query (LINQ) je integrisani jezik upita, odnosno kontroverzni Microsoftov projekat za dodavanje sintakse jezika upita sličnu SQL-u. Specifična definicija, sa ovim alatom možete relativno lako kreirati upite prema tabelama i listama podataka, ne nužno bazi podataka.

Microsoftovim primjerima nedostaje jedan mali, ali važan detalj. Da bismo radili sa skupom podataka, potrebno je da koristimo strukturu DataContext, čija se definicija može dobiti pomoću SPMetal.exe za listu ili biblioteku prisutnih na Sharepoint serveru. Drugim riječima, prvo trebamo definirati ovaj tip podataka, a zatim kreirati upit Općenito, preporučujem korištenje poseban uslužni program za rad u MVS: Imtech Get SPMetal Definition Extension.

Da bismo radili, potrebna nam je neka vrsta liste. Hajde da iskoristimo prednost jednostavna lista- "prilagođena lista"; naslov - "Jednostavna žalba"; zadana polja: Broj, Naslov.

I tako, napravimo jednostavnu (pogledajte odgovarajuću stranicu), uz pomoć koje ćemo promatrati rezultat naših manipulacija. Prilikom kreiranja projekta, mi ćemo odabrati izolirani model povjerenja, ako postoji potreba za radom sa listama ili podacima drugih čvorova, tada morate kreirati projekt za farmu.

Zatim kreirajmo klasu datoteke "SimpleInversion.cs" koristeći SPMetal.exe ili dodatak za studio. Dodajmo vezu na biblioteku Microsoft.Sharepoint.Linq. Više detaljne informacije može se dobiti na MSDN web stranici.

Kreirajmo funkciju Render i my_mess. IN posljednja funkcija Generisat ćemo podatke za prikaz.

// preopteretiti funkciju
zaštićeno nadjačavanje void Render (pisač HTMLTextWriter)
{
baza .Render(pisac);
my_mess(pisac);
}

// Naša funkcija za rad sa listom
public void my_mess (pisac HTMLTextWriter)
{
// Kreirajte kontekst
DataContext data = new DataContext("http://localhost");
// Povežite ga sa odgovarajućom listom na sajtu u korenu
EntityList<Элемент>Simple_Message = data.GetList<Элемент>("Jednostavna žalba");
// Izvrši zahtjev - odaberite sve linije sa liste "Jednostavan zahtjev".
var query = iz nereda u Simple_Message
odaberite nered;
// prikazuje sve podatke iz rezultata upita
foreach (var elem u upitu)
{
writer.WriteLine( "Stavka liste:"+ elem.Name.ToString());
writer.WriteBreak();
}

}

Sastavljamo projekat i dodajemo ga na stranicu. Kao rezultat, svi redovi na listi će biti prikazani.

Nastavak kasnije (članak nije završen)...

Primjer kreiranja lokalne baze podataka Microsoft podaci SQL Server uMS Visual Studio

Ova tema pokazuje rješenje problema kreiranja baze podataka tipa SQL Server koristeći MS Visual Studio. Razmatraju se sljedeća pitanja:

  • rad sa prozorom Server Explorer u MS Visual Studio;
  • kreiranje lokalne baze podataka tipa SQL Server Database;
  • kreiranje tabela u bazi podataka;
  • uređivanje struktura tablica;
  • međusobno povezivanje tabela baze podataka;
  • unos podataka u tabele koristeći MS Visual Studio.

Problemsko stanje

Koristeći alate MS Visual Studio, kreirajte bazu podataka tipa MS SQL Server pod nazivom Education.

Baza podataka sadrži dvije tabele Student i Session.

Tabele su međusobno povezane nekim poljem.

Struktura prvog stola “Student”.

Struktura druge tabele “Session”.

Izvršenje1. Preuzmite MS Visual Studio.2. Aktivirajte

prozor Server Explorer. Za rad sa bazama podataka, Microsoft nudi lagani server baze podataka, Microsoft SQL Server. Postoje

različite verzije

Microsoft SQL Server, na primjer: Microsoft SQL Server 2005, Microsoft SQL Server 2008, Microsoft SQL Server 2014 i druge verzije.

Ove verzije se mogu preuzeti sa Microsoft web stranice www.msdn.com.

Ovaj server je odličan za rad sa bazama podataka. Besplatan je i ima grafičko sučelje za kreiranje i administriranje baza podataka pomoću alata za upravljanje SQL Serverom.

Prije svega, prije kreiranja baze podataka, morate aktivirati uslužni program Server Explorer. Da biste to uradili, u MS Visual Studio morate pozvati (slika 1)

Pogled -> Server Explorer

Rice. 1. Pozovite Server Explorer

Jednom pozvan, prozor Server Explorera će imati približan izgled kao što je prikazano na slici 2.

Rice. 2. Server Explorer prozor 3. Kreiranje baze podataka “Obrazovanje”. Da biste kreirali novu bazu podataka zasnovanu na provajderu podataka Microsoft SQL Server, potrebno je da kliknete na čvor Data Connections, a zatim da izaberete „

Kreirajte novu SQL Server bazu podataka...

” (Sl. 3). Rice. 3. Pozivanje naredbe za kreiranje baze podataka SQL Servera Kao rezultat, prozor “

Kreirajte novu SQL Server bazu podataka (Sl. 4). instaliran na vašem računaru. U našem slučaju, ovo ime je “SQLEXPRESS”.

Polje „Naziv nove baze podataka:“ označava ime baze podataka koja se kreira. U našem slučaju ovo je naziv Obrazovanje.

Opcija Koristi Windows autentifikaciju mora ostati nepromijenjena i kliknite na OK.

Rice. 4. Stvaranje nova baza SQL Server 2008 Express podaci koristeći MS Visual Studio 2010

Nakon dovršetka koraka, prozor Server Explorer će poprimiti oblik kao što je prikazano na slici 5. Kao što se može vidjeti sa slike 5, baza podataka Education sa imenom

sasha-pc\sqlexpress.Education.dbo

Rice. 5. Server Explorer prozor nakon dodavanja baze podataka obrazovanja

4. Objekti baze podataka obrazovanja.

Ako proširite Obrazovnu bazu podataka (znak "+"), možete vidjeti popis sljedećih glavnih objekata:

  • Dijagrami baze podataka – dijagrami baze podataka. Dijagrami pokazuju odnose između tabela baze podataka, odnose između polja različitih tabela, itd.;
  • Tabele – tabele u koje se nalaze podaci baze podataka;
  • Pogledi – reprezentacije. Razlika između pogleda i tabela je u tome što tabele baze podataka sadrže podatke, dok prikazi podataka ne, a sadržaj se bira iz drugih tabela ili pogleda;
  • Pohranjene procedure – pohranjene procedure. Oni su grupa povezanih SQL izraza koji pružaju dodatnu fleksibilnost pri radu s bazom podataka.

5. Kreiranje tabele učenika.

On trenutno Baza podataka Education je potpuno prazna i ne sadrži nikakve objekte (tabele, pohranjene procedure, poglede itd.).

Da biste kreirali tabelu, morate pozvati kontekstni meni (kliknite desni klik miša) i odaberite naredbu “Dodaj novu tablicu” (slika 6).

Rice. 6. Dodajte novu naredbu tablice

Postoji još jedna opcija za dodavanje tabele baze podataka pomoću komandi menija Podaci:

Podaci -> Dodaj novi -> Tabela

Rice. 7. Alternativna opcija dodavanje nove tabele

Kao rezultat, otvoriće se prozor za dodavanje tabele, koji sadrži tri kolone (slika 8). U prvu kolonu “Ime kolone” potrebno je da unesete naziv odgovarajućeg polja u tabeli baze podataka. U drugu kolonu „Tip podataka“ potrebno je da unesete tip podataka ovog polja. Treća kolona “Dozvoli nulte vrijednosti” označava opciju mogućnosti da podaci nedostaju u polju.

Rice. 8. Novi prozor za kreiranje tabele

Koristeći uređivač tabele, potrebno je da kreirate Student tabelu kao što je prikazano na slici 9. Ime tabele se mora navesti kada je zatvorite.

U uređivaču tabele možete postaviti svojstva polja u prozoru Svojstva kolone.

Da biste podesili dužinu niza (nvchar) u znakovima, postoji svojstvo Length u prozoru Column Properties.

Zadana vrijednost za ovo svojstvo je 10. Rice. 9. Studentski sto Sljedeći korak je postavljanje ključnog polja. Ovo se radi pozivanjem komande “Set Primary Key” iz

kontekstni meni

Broj polja_knjige.

Pomoću ključnog polja uspostavit će se odnosi između tabela. U našem slučaju, ključno polje je broj knjige razreda.

Rice. 10. Postavljanje ključnog polja

Nakon postavljanja primarnog ključa, prozor tabele će izgledati kao na slici 11.

Rice. 11. Studentski sto nakon završnog formiranja

Sada možete zatvoriti sto. U prozoru za čuvanje tabele potrebno je da podesite njen naziv – Student (Sl. 12).

Rice. 12. Unos imena tabele Student

6. Kreiranje tabele Sesije.

Po uzoru na kreiranje tabele Student, kreira se tabela Sesije.

Slika 13 prikazuje tabelu sesija nakon konačnog formiranja. Primarni ključ je postavljen u polju Num_book.

Ime tablice daje sesija.

Rice. 13. Tablica sesija

Nakon završetka koraka, dvije tabele Student i Session će biti prikazane u prozoru Server Explorer. Tako se u bazu podataka može dodati bilo koji broj tabela. 7. Uređivanje strukture tabele.

Postoje slučajevi kada trebate promijeniti strukturu tabele baze podataka.

Da biste izvršili promjene u tablicama baze podataka u MS Visual Studio, prvo morate poništiti opciju "Spreči spremanje promjena" koje zahtijevaju ponovno kreiranje stola

” kao što je prikazano na slici 14. U suprotnom, MS Visual Studio će blokirati promjene u prethodno kreiranoj tabeli. Prozor Options prikazan na slici 14 se poziva iz menija Tools sledećim redosledom:

Alati -> Opcije -> Alati baze podataka -> Dizajneri tablica i baza podataka

Rice. 14. Opcija “

Spriječite spremanje promjena koje zahtijevaju ponovno kreiranje tablice

Nakon konfiguracije, možete promijeniti strukturu tablice. Da biste to uradili, koristite naredbu „Otvori definiciju tabele“ (slika 15) iz kontekstnog menija, koja se poziva za izabranu tabelu (desni klik).

Rice. 15. Pozivanje naredbe “Otvori definiciju tabele”.

Ova komanda se takođe nalazi u meniju Podaci:

Podaci -> Otvori definiciju tabele

  • Prvo se mora odabrati tabela.
  • izaberite komandu Dodaj novi dijagram iz kontekstnog menija (ili iz menija Podaci).

Rice. 16. Pozivanje naredbe za dodavanje novog dijagrama

Kao rezultat, otvoriće se prozor za dodavanje novog dijagrama Add Table (Slika 17). U ovom prozoru treba da izaberete dve tabele Sesija i Učenik u nizu i kliknete na dugme Dodaj.

Rice. 17. Prozor za dodavanje tabela u dijagram

Rice. 18. Tabele učenika i sesija nakon što ih dodate na dijagram

Da biste započeli uspostavljanje odnosa između tabela, potrebno je da kliknete na polje Num_book u tabeli Student, a zatim ga (bez puštanja dugmeta miša) prevučete u polje Num_book tabele Sesije.

Kao rezultat, dva prozora će se otvoriti uzastopno: Tabele i kolone (Sl. 19) i Odnos stranog ključa (Slika 20), u kojima morate ostaviti sve kako jeste i potvrditi svoj izbor sa OK.

U prozoru Tabele i kolone specificirano je ime odnosa (FK_Session_Student) i imena nadređenih (Student) i podređenih tabela.

Rice. 19. Prozor za tabele i kolone

Rice. 20. Prozor za podešavanje svojstava relacije

Nakon izvršenih radnji uspostavit će se odnos između tabela (slika 21).

Rice. 21. Odnos između tabela učenika i sesije

Čuvanje dijagrama se vrši na isti način kao i snimanje tabele. Naziv dijagrama morate odabrati po vlastitom nahođenju (na primjer, Diagram1).

Nakon što odredite naziv dijagrama, otvoriće se prozor Sačuvaj u kojem je potrebno potvrditi svoj izbor (Slika 22).

Rice. 22. Potvrda spremanja promjena u tabelama

9. Unošenje podataka u tabele.

Microsoft Visual Studio vam omogućava da direktno unosite podatke u tabele baze podataka.

U našem slučaju, prilikom uspostavljanja veze (Sl. 19), Studentska tabela se bira kao Tabela Primarni Ključ.

Stoga prvo trebate unijeti podatke u ćelije ove određene tabele. Ako pokušate prvo da unesete podatke u tabelu sesija, sistem će blokirati takav unos i prikazati odgovarajuću poruku.

Da biste pozvali režim za unos podataka u Student tabelu, potrebno je da pozovete komandu Prikaži podatke tabele iz kontekstnog menija (desni klik) ili iz menija Podaci (Sl. 23).

Rice. 23. Prikaži naredbu podataka tablice

Otvara se prozor u koji treba da unesete ulazne podatke (Sl. 24).

Rice. 24. Unošenje podataka u tabelu učenika

Nakon unosa podataka u tabelu Student, potrebno je da unesete podatke u tabelu Sesije.

Na primjer, ako su vrijednosti unesene u polje Num_book tabele učenika “101”, “102”, “103” (pogledajte sliku 24), tada ove vrijednosti treba unijeti u polje Num_book tabele Session.

Ako pokušate da unesete drugu vrednost, sistem će prikazati približno sledeći prozor (Sl. 25).

Rice. 25. Poruka o grešci o unosu podataka za povezane tabele učenika i sesija

Tabela sesija sa unesenim podacima prikazana je na slici 26.

      1. U prozoru Server Explorer, gde su tabele baze podataka na Microsoft SQL Serveru predstavljene u obliku stabla (vidi sliku 4.1.), možete otvoriti prozor za svaku tabelu klikom na dugme Prikaži podatke tabele. U ovom prozoru možete uređivati ​​podatke tabele. Ovaj prozor za uređivanje izgleda otprilike kao što je prikazano na sl. 4.2. Otprilike, jer cijeli volumen nije uključen u sliku zbog velikog broja stupaca.

Implementacija mapiranja baze podataka

Mapiranje baze podataka (komponenta DataSet) je neophodno kako bi se eliminisali nepotrebni pozivi bazi podataka i servera. Ovo je vrlo važna karakteristika, jer ako s bazom radi mnogo korisnika, opterećenje na serveru može biti prilično veliko – broj zahtjeva je višestruko veći, što će dovesti do usporavanja izvršenja upita.

Stoga, zahvaljujući DataSet-u, računar klijenta prikazuje bazu podataka sa kojom radi. Po završetku rada, klijentska i serverska baza podataka se sinhronizuju (tačnije, promjene u klijentskoj bazi se vrše na serverskoj bazi)

Prikaz naše baze podataka na MS Visual Studio 2005 izgleda ovako:

Svi numerički podaci su tipa Int32, string podaci su String. Veličine podataka niza odgovaraju onima datim u fizičkom modelu baze podataka.

Snimak ekrana pokazuje da svaka tabela takođe sadrži TableAdapters. Ovo su neka vrsta mostova za povezivanje DataSeta i izvora podataka. Postoje metode kao što su Fill i GetData()

    Ova metoda je dizajnirana da popuni tabelu potrebnim podacima iz izvora (datoteka baze podataka)

GetData() metoda

    1. Dizajniran za preuzimanje podataka iz tabele za mapiranje.

Implementacija softvera Glavna karakteristika u implementaciji softvera je činjenica da su sve klase odgovorne za uređivanje tabela baze podataka naslijeđene iz jedne, što olakšava implementaciju. Metode ove osnovne klase su opisane gore. Virtuelne metode osnovne klase moraju se nadjačati u klasi potomaka. Sve ove metode omogućavaju promjenu parametara kao što su naziv zaglavlja obrasca, popunjavanje i spremanje željene tablice baze podataka (jedna klasa potomaka radi samo s jednom tablicom, u smislu uređivanja podataka; međutim, kada se podaci prikazuju korisniku, moguće je koristiti nekoliko tabela baze podataka kako bi se podaci prikazali u obliku razumljivom korisniku).

      1. Programski interfejs

Glavni prozor je MDI aplikacija koja ima sljedeći meni:

Svaku od tabela za uređivanje baze podataka poziva odgovarajuća stavka menija „Tabele“.

Izvještaj o opterećenju nastavnika kreira se i klikom na odgovarajuću stavku menija „Izvještaji“.

Kao dodatna karakteristika softvera, postoji stavka menija „Konzola“ koja vam omogućava da izvršite SQL upite prema bazi podataka koju je korisnik uneo i rezultat prikaže u tabeli (komponenta DataTable). Da biste to učinili, naravno, morate znati nazive tabela i polja, a uglavnom je kreiran u svrhu praktičnosti implementacije softvera, ali to mogu iskoristiti i drugi “namjenski” korisnici.

Napomena: Nakon čitanja ovog predavanja, moći ćete: kreirati upite koristeći SQL Server Management Studio Query Builder, preuzimati informacije baze podataka iz sistemskih tablica baze podataka, dinamički kreirati jednostavni upiti na osnovu korisničkog unosa, formatiranje korisničkog unosa i filtriranje složenih dinamičkih upita, raščlanjivanje i preformatiranje podataka za korištenje u filteru, zaštita baze podataka od napada SQL injekcije, korištenje sp_executeSql za prosljeđivanje upita

Prethodno predavanje govorilo je o tome kako povećati performanse zahtjevi. Sada znate kako da kreirate efikasan skup upita koji će korisnicima pružiti najviše korisne informacije iz vaše aplikacije koristeći unaprijed izgrađene upite u pohranjenim procedurama ili pogledima.

Međutim, u svim aplikacijama osim u najjednostavnijim, nemoguće je znati sve unaprijed. moguće opcije vrste informacija koje bi korisnicima mogle biti potrebne i kako će ih željeti filtrirati i organizirati. Umjesto da pokušavate pružiti sve takve mogućnosti, možete dati korisniku kontrolu nad informacijama koje prijavljuje aplikacija. Ovo predavanje govori o tome kako dinamički izgraditi upite na osnovu izbora koje korisnik donosi tokom vremena izvođenja.

Korisničko sučelje za izgradnju upita

SQL Server Management Studio uključuje sofisticirano sučelje za izgradnju upita. Hajde da istražimo ovo sučelje da bismo vam dali ideju o tome kako se upiti mogu kreirati dinamički. Vašoj aplikaciji neće biti potrebni svi kontrole koje obezbeđuje SQL Server Management Studio. U suštini, morate dobro razmisliti o tome kako na najbolji mogući način ograničiti izbor korisnika.

Kreirajte upit koristeći SQL Server Management Studio Query Builder

Dohvaćanje informacija o tabelama baze podataka

Da bi korisniku pružila listu opcija, aplikacija će možda morati dohvatiti informacije o tablicama baze podataka. Postoji nekoliko načina da dobijete ove informacije. Najvažnija od ovih metoda je korištenje INFORMATION_SCHEMA sheme. Ova shema je standardna u bilo kojoj bazi podataka.

Korištenje INFORMATION_SCHEMA

INFORMATION_SCHEMA shema je posebna shema koja postoji u svakoj bazi podataka. Sadrži definicije nekih objekata baze podataka.

INFORMATION_SCHEMA prati ANSI standard, koji je dizajniran za dohvaćanje informacija iz bilo kojeg ANSI kompatibilnog motora baze podataka. U SQL Serveru, INFORMATION_SCHEMA se sastoji od skupa pogleda koji postavljaju upite sys* tablicama baze podataka koje sadrže informacije o strukturi baze podataka. Ove tabele se mogu direktno ispitivati, baš kao i svaka tabela baze podataka. Međutim, u većini slučajeva, bolje je koristiti INFORMATION_SCHEMA poglede sheme za dohvaćanje informacija iz *sys tablica.

Napomena. INFORMATION_SCHEMA shema ponekad postavlja upite za tablice koje nisu potrebne, što šteti performansama. U sljedećem primjeru u ovoj lekciji, ovo nije posebno važno jer je aplikacija već čekala korisnički unos. Međutim, ovo treba uzeti u obzir ako je brzina važan aspekt za vašu aplikaciju.

Evo osnovni kod T-SQL, koji se koristi za dobijanje informacija o kolonama uključenim u tabelu:

Imajte na umu da da biste dobili shemu za tablicu, morate odabrati polje TABLE_SCHEMA. Ovo može imati implikacije za kreiranje sličnih upita u budućnosti. Da biste eksperimentisali sa tehnikama opisanim u ovom predavanju, kreirajte novi projekat u Visual Studio.

Kreirajte novi projekat Visual Studio
  1. Iz menija Start izaberite Svi programi, Microsoft Visual Studio 2005, Microsoft Visual Studio 2005.
  2. Iz menija Visual Studio izaberite File, New, Project.
  3. U panelu Tipovi projekata proširite Visual Basic rješenja i odaberite predložak aplikacije na ploči Predlošci. Dajte projektu naziv Chapter7 i kliknite na OK.
  4. Aplikacija za ovaj primjer se može naći u datotekama primjera u folderu \Chapter7\DynQuery. Možete izrezati i zalijepiti kod za sljedeće procedure iz datoteke Form1.vb.
Dobivanje liste tabela i pogleda

Obično ćete morati da dozvolite korisniku da izabere ne samo kolone već i tabelu za dinamički upit, tako da ćete morati da prikažete listu tabela korisniku. Potrebne informacije možete dobiti putem sljedećeg zahtjeva:

ODABIR TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE IZ INFORMATION_SCHEMA.TABLES

U aplikaciji, ovaj upit se može koristiti na sljedeći način.

Dobivanje liste tabela

Visual Basic kod iznad inicijalizuje SqlCommand objekat pod nazivom com sa SQL nizom koji treba da se izvrši, a zatim izvršava SqlCommand objekat. Ovo je najlakši način da izvršite T-SQL naredbu iz aplikacije.

Kao vježbu, možete postaviti dijagrame i tabele proizvedene postupkom učitavanja našeg obrasca u korisničko sučelje aplikacije kao obrazac tako da korisnik može odabrati dijagram i tablicu s kojima će raditi. Za primjer u ovom predavanju, pretpostavit ćemo da je korisnik odabrao šemu prodaje i tabelu Kupci.

Kada korisnik odabere tabelu, lista kolona za tu tabelu može se dohvatiti koristeći isti metod, koristeći korisnički unos kao ime tabele u upitu. Da biste to učinili, unosite rezervirano mjesto u string upita, a zatim ga zamijenite pozivom String.Format . U kodu ispod, čuvar mjesta u nizu upita je (0).

Dobivanje liste kolona
  1. Dodajte sljedeću proceduru RetrieveColumns u kod ispod procedure RetrieveTables:

    Sub RetrieveColumns(ByVal TableName kao string) MyConnection As New SqlClient.SqlConnection(_ "Data Source=.\SQLExpress;" & _ "Initial Catalog=AdventureWorks;Trusted_Connection=Yes;") Dim sqlStr As String "TAB_SELECT s , COLUMN_NAME, " + _ "ORDINAL_POSITION, DATA_TYPE " + _ "IZ INFORMATION_SCHEMA.COLUMNS " + _ "WHERE (TABLE_NAME = "(0)")" Zatamni tablicu Columns kao novu tablicu podataka Dim da Kao novi SqlClient.Aptermat(DataringAd.Sql (sqlStr, TableName), MyConnection) da.Fill(tableColumns) Za i As Integer = 0 Za tableColumns.Rows.Count - 1 Sa tableColumns.Rows.Item(i) Console.WriteLine("(0) (1) (2 )", _ .Item(1), .Item(2), .Item(3)) Kraj sa sljedećim krajem pod

  2. U proceduri Form1_Load, dodajte sljedeći poziv proceduri RetrieveColumns nakon procedure RetrieveTables: