Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1din 4

Apelai o procedur stocat parametrizat utiliznd ADO.NET i Visual C# .

NET

CUM sa Apelai o procedur stocat parametrizat utiliznd


ADO.NET i Visual C# .NET
Exist cteva moduri de a utiliza ADO.NET pentru a apela o procedur stocat i pentru a reveni reveni
valori i returneaz parametri, inclusiv:
Utilizai un set de date obiect se colecteaz rndurile returnate i s funcioneze cu aceste
rnduri pe lng valorile revenii i parametrii reveni.
Utilizai un obiect DataReader se colecteaz rndurile returnate, pentru a muta prin aceste
rnduri, i apoi s revenii parametrii i valori de returnare gather.
Utilizai metoda ExecuteScalar pentru a returna valoarea din prima coloan din rezultatele
primul rnd cu valorile revenii i parametrii reveni. Aceasta este cea mai util cu funcii
cumulate.
Utilizai metoda ExecuteNonQuery pentru a reveni numai return parametrii i valori de
returnare. Rndurile returnate sunt eliminate. Aceasta este cea mai util pentru executarea de
interogri de aciune.
Acest articol demonstreaz ultimii trei metode i utilizeaz att SqlCommand i obiectele
OleDbCommand . Asigurai-v c ai copiat numai codul pentru furnizor gestionate pe care l utilizai.
Dac nu suntei sigur ce furnizor gestionate ar trebui s utilizai, vizitai urmtorul site Microsoft
Developer Network Web: Furnizori de date .NET
n fiecare dintre exemplele din acest articol, parametrii sunt adugate la colecia de parametrii
obiectului de comand . Atunci cnd utilizai obiectul SqlCommand , nu avei se adaug parametrii n
orice ordine anume, dar parametrii trebuie s avei numele corect. Atunci cnd utilizai obiectul
OleDbCommand , trebuie s adugai parametri n ordinea corect i nu se poate utiliza parametrii de
nume.
Utilizai DataReader pentru a reveni rnduri i parametrii
Utilizai obiectul DataReader pentru a reveni doar n citire, doar pentru redirecionare flux de date.
Informaiile care conine DataReader pot proveni de la o procedur stocat. Acest exemplu utilizeaz
obiectul DataReader pentru a executa o procedur stocat care are un parametru de ieire i o intrare i
apoi se mut prin returnate nregistrrile pentru a vizualiza parametrii reveni.
1. Creai urmtoarea procedur stocat pe serverul care execut Microsoft SQL Server:
CREATE PROCEDURE TestProcedure
(
@au_idIN varchar (11),
@numTitlesOUT Integer OUTPUT
)
AS
SELECT A.au_fname, A.au_lname, T.title
FROM authors as A
JOIN titleauthor AS TA ON A.au_id=TA.au_id
JOIN titles AS T ON T.title_id=TA.title_id
WHERE A.au_id=@au_idIN
SET @numTitlesOUT = @@Rowcount
RETURN (5)

Apelai o procedur stocat parametrizat utiliznd ADO.NET i Visual C# .NET

2. Creai un nou proiect Visual C# .NET Windows Application.


3. Utilizai instruciunea folosind pe sistem i System.Data spaii de nume, astfel nct nu trebuie s
fac declaraii n acele spaii de nume mai trziu n codul. Adugai acest cod de la nceputul
modulul cod formular. Asigurai-v pentru a copia numai codul pentru furnizorul de la care ai
ales.SQL Client
using System.Data.SqlClient;

4. nlocuii codul n Evenimentul Form_Load privat cu urmtorul cod:SQL Client


SqlConnection PubsConn = new SqlConnection("Data Source=server;integrated Security=sspi;initial
catalog=pubs;");
SqlCommand testCMD = new SqlCommand("TestProcedure", PubsConn);
testCMD.CommandType = CommandType.StoredProcedure;
SqlParameter RetVal = testCMD.Parameters.Add("RetVal", SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
SqlParameter IdIn = testCMD.Parameters.Add("@au_idIN", SqlDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
SqlParameter NumTitles = testCMD.Parameters.Add("@numtitlesout", SqlDbType.VarChar, 11);
NumTitles.Direction = ParameterDirection.Output;
IdIn.Value = "213-46-8915";
PubsConn.Open();
SqlDataReader myReader = testCMD.ExecuteReader();
Console.WriteLine ("Book Titles for this Author:");
while (myReader.Read())
{
Console.WriteLine ("{0}", myReader.GetString (2));
};
myReader.Close() ;
Console.WriteLine("Number of Rows: " + NumTitles.Value );
Console.WriteLine("Return Value: " + RetVal.Value);

5. Modificai irul de conexiune pentru obiecte de conexiune pentru a indica pe computerul care
execut SQL Server.
6. Codul de executare. Observai c DataReader regsete nregistrrile i apoi returneaz valorile
parametru. Utilizai metoda de citire a DataReader obiectului s se deplaseze nregistrri
returnate.
Fereastra de ieire afieaz titlurile de dou cri, valoarea returnat de 5 i parametrul de ieire,
care conine numrul de nregistrri (2). Observai c trebuie s nchidei DataReader n cod
pentru a vedea valorile parametru. n plus, Reinei c nu avei pentru a trece prin toate
nregistrrile pentru a vedea parametrii return dac DataReader se nchide.
Utilizai DataReader pentru a reveni rndurile i parametrii
Utilizai metoda ExecuteScalar a obiectului de comand pentru a regsi valori ale parametrilor. n plus,
ExecuteScalar returneaz prima coloan din primul rnd de procedur stocat. Aceasta este cea mai
util pentru funciile cumulate exemplul urmtor.
1. Creai urmtoarea procedur stocat pe serverul care execut SQL Server:
CREATE PROCEDURE TestProcedure2

Apelai o procedur stocat parametrizat utiliznd ADO.NET i Visual C# .NET

(
@au_idIN varchar (11)
)
AS
/* set nocount on */
SELECT COUNT(T.title)
FROM authors AS A
JOIN titleauthor AS TA ON A.au_id=TA.au_id
JOIN titles AS T ON T.title_id=TA.title_id
WHERE A.au_id=@au_idIN
RETURN(5)

2. Creai un nou proiect Visual C# .NET Windows Application.


3. Utilizai instruciunea folosind pe sistem i System.Data spaii de nume, astfel nct nu trebuie
s fac declaraii n acele spaii de nume mai trziu n codul. Adugai acest cod de la nceputul
modulul cod formular. Asigurai-v c ai copiat numai codul pentru furnizorul de la care ai
ales.SQL Client
using System.Data.SqlClient;

4. Adugai urmtorul cod pentru Evenimentul Form_Load :SQL Client


string strCount;
SqlConnection PubsConn = new SqlConnection("Data Source=server;integrated Security=sspi;initial
catalog=pubs;");
SqlCommand testCMD = new SqlCommand("TestProcedure2", PubsConn);
testCMD.CommandType = CommandType.StoredProcedure;
SqlParameter RetVal = testCMD.Parameters.Add("RetVal", SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
SqlParameter IdIn = testCMD.Parameters.Add("@au_idIN", SqlDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
IdIn.Value = "213-46-8915";
PubsConn.Open();
strCount =testCMD.ExecuteScalar().ToString() ;
Console.WriteLine("Number of Rows: " + strCount );
Console.WriteLine("Return Value: " + RetVal.Value);

5. Modificai irul de conexiune pentru obiecte de conexiune pentru a indica pe computerul care
execut SQL Server.
6. Codul de executare. Observai c metoda ExecuteScalar a obiectului comand returneaz
parametrii. ExecuteScalar returneaz valoarea din coloana 1, rndul 1 al set de rnduri
returnate. De aceea, valoarea intCount este rezultatul funcia count din procedura stocat.
Utilizai metoda ExecuteScalar a obiectului de comand
Acest exemplu utilizeaz metoda ExecuteNonQuery s executai interogarea i pentru a returna valorile
parametru. ExecuteNonQuery Returneaz numrul de nregistrri care sunt afectate dup ce se execut
interogarea. Cu toate acestea, ExecuteNonQuery nu returneaz orice rnduri sau coloane de procedur
stocat.
Metoda ExecuteNonQuery este util cnd utilizai INSERT, UPDATE sau DELETE declaraii dac trebuie s

Apelai o procedur stocat parametrizat utiliznd ADO.NET i Visual C# .NET

tii ct de multe rnduri sunt modificate. ntr-o procedur stocat n care utilizai numai o instruciune
SELECT, primii -1, deoarece rndurile nu sunt afectate de interogare.
1. Creai urmtoarea procedur stocat pe computerul care execut SQL Server:
CREATE PROCEDURE TestProcedure3
(
@au_idIN varchar (11),
@au_fnam varchar (30)
)
AS
/* set nocount on */
UPDATE authors SET au_fname = @au_fnam
WHERE au_id = @au_idin
RETURN (5)

2. Creai un nou proiect Visual C# .NET Windows Application.


3. Utilizai instruciunea folosind pe sistem i System.Data spaii de nume, astfel nct nu trebuie
s fac declaraii n acele spaii de nume mai trziu n codul. Adugai acest cod de la nceputul
modulul cod formular. Asigurai-v c ai copiat numai codul pentru furnizorul de la care ai
ales.SQL Client
using System.Data.SqlClient;

4. nlocuii codul de mai jos evenimentul Form1_Load privat n modulul cod Form1 cu urmtorul
cod:SQL Client
string strRowAffect;
SqlConnection PubsConn = new SqlConnection("Data Source=server;integrated Security=sspi;initial
catalog=pubs;");
SqlCommand testCMD = new SqlCommand("TestProcedure3", PubsConn);testCMD.CommandType =
CommandType.StoredProcedure;
SqlParameter RetVal = testCMD.Parameters.Add("RetVal", SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
SqlParameter IdIn = testCMD.Parameters.Add("@au_idIN", SqlDbType.VarChar, 11);
IdIn.Direction = ParameterDirection.Input;
SqlParameter FnameIn = testCMD.Parameters.Add("@au_fnam", SqlDbType.VarChar, 30);
FnameIn.Direction = ParameterDirection.Input;
IdIn.Value = "213-46-8915";
FnameIn.Value = "Marjorie";
PubsConn.Open();
strRowAffect = testCMD.ExecuteNonQuery().ToString() ;
Console.WriteLine("Number of Rows: " + strRowAffect );
Console.WriteLine("Return Value: " + RetVal.Value);

5. Modificai irul de conexiune pentru obiecte de conexiune pentru a indica pe computerul care
execut SQL Server.
6. Codul de executare. Fereastra de ieire afieaz numrul de rnduri afectate (intRowAffect) i
valoarea parametrul return.

S-ar putea să vă placă și