Nov 9 2007

SQLParameter in .NET

Categorie: SQL ServerCatalin Dumitru @ 09:22

Executia interogarilor la momentul executiei unei aplicatii este o necesitate fie ca este vorba de o aplicatie web, aplicatie desktop sau chiar o aplicatie de tip consola. Asadar, preluarea intrarilor din aplicatie si trimiterea lor ca parametrii pentru o procedura stocata sau functie este necesara atunci cand se doreste realizarea de operatii pe seturi de date.

In continuare se va presupune existenta unui obiect SQLConnection asociat cu obiectul SQLCommand.

Utilizarea obiectului SQLParameters faciliteaza transmitere valorilor catre interogari in .NET. Acesti parametrii pot avea orice directie (input, output, inputoutput). de asemenea se pot asocia tipuri de date, dimensiuni si valori. Sunt permise mai multe constructii pentru obiectele SQLParameters. Un exemplu este prezentat in cele ce urmeaza:

String SirSql = “interogarea dumneavoastra”;
SqlCommand SqlCmd = new SqlCommand(SirSql);
SqlParameter SqlPar = new SqlParameter(“@PrimulParam.”, SqlDbType.VarChar, 50)
SqlPar.Value = 100;
SqlPar.Direction = ParameterDirection.Input;
SqlCmd.Parameters.Add(SqlPar);

Exemplul de mai sus ne arata cum este declarat un parametru de tip INPUT cu numele @PrimulParametru de tip VARCHAR si dimensiune 50. Deasemenea i-a fost atribuita valoarea 100.

Cand construiti dinamic o interogare, puteti specifica valoarea pentru coloane. Valoare care se poate gasi in variabile si care prin concatenare si functii pe text (string) va poate ajuta sa compuneti interogari. Generarea de interogari la nivelul serverului de baze de date sau la nivelul aplicatiei client este un subiect care nu va fi dezbatut aici, poate intr-un alt articol. Pentru moment am sa exemplific constructia unei interogari la nivelul aplicatiei client (business layer) si executarea acesteia utilizand obiectul SQLCommand.

Este posibila constructia interogarilor asa cum este prezentata putin mai jos iar la momentul executarii, valoarea variabilei sa se gaseasca in constructie.

int VariabilaMea = “75”;
string sql  = ” SELECT * FROM TabelaMea WHERE ID = “ + VariabilaMea;
SqlCommand SqlCmd = new SqlCommand(sql);
SqlCmd.ExecuteNonQuery();

O metoda alternativa propun in cele ce urmeaza:

SqlCommand SqlCmd = new SqlCommand(sql);
SqlParameter SqlPar = new SqlParameter(“@PrimulParametru”, SqlDbType.Int);.
SqlPar.Value = “75”;
SqlCmd.Parameters.Add(SqlPar);
SqlCmd.ExecuteNonQuery();

De ce sa specificam separat parametrii? Sa luam cazul operatiilor de actualizare (adaugare, modificare) asupra unei tabele. Daca doriti adaugarea unui fisier in baza de date, nu veti putea realiza concatenarea interogarii; motivul este pentru ca fisierul va fi in format binar. Solutia este de a trimite continutul obiectului catre interogare prin specificarea valorii obiectului ca parametru. Ca exemplu:

byte[] fileData = new byte[lengthOfFile];

Apoi atribuim variabila de tip byte[] obiectului SQLParameter utilizand constructorul:

SqlParameter(string NumeParametru, Obiect valoare).

Codul de mai jos permite trimiterea continutului unui fisier ca parametru si adaugarea acestuia intro tabela.

//Creare parametru si executare interogare.
SqlCommand SqlCmd = new SqlCommand(sql);
SqlParameter SqlPar = new SqlParameter(“@binaryValue”, fileData);
SqlCmd.Parameters.Add(SqlPar);
SqlCmd.ExecuteNonQuery();

Sursa articol: Raj Vasant

Etichete: ,