Momentan sunteți offline, așteptați să vă reconectați la internet

CUM să: A apela o procedură stocată parametrizată utilizând ADO.NET şi Visual C#.NET

IMPORTANT: Acest articol a fost tradus de software-ul de traducere automată Microsoft, si nu de un traducător. Microsoft vă oferă atât articole traduse de persoane, cât şi articole traduse automat, astfel incat aveti access la toate articolele din Baza noastră de informatii în limba dvs. materna. Totuşi, un articol tradus automat nu este întotdeauna perfect. Acesta poate conţine greşeli de vocabular, sintaxă sau gramatică, la fel cum un vorbitor străin poate face greşeli vorbind limba dvs. materna. Compania Microsoft nu este responsabilă pentru nici o inexactitate, eroare sau daună cauzată de traducerea necorespunzătoare a conţinutului sau de utilizarea traducerii necorespunzătoare de către clienţii nostri. De asemenea, Microsoft actualizează frecvent software-ul de traducere automată.

Faceți clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 310070
Pentru un Microsoft Visual Basic.NET versiune a acestui articol, consultaţi 308049.
Pentru un Microsoft Visual C++.NET versiune a acestui articol, consultaţi 310071.
Pentru un Microsoft Visual J#.NET versiune a acestui articol, consultaţi 320627.

Acest articol se referă la următoarele Microsoft .NET cadru clasa biblioteca spaţii de nume:
  • System.data.SqlClient
  • System.data.OleDb

ÎN ACEASTĂ ACTIVITATE

REZUMAT
Există mai multe moduri de a folosi ADO.NET pentru a apela o procedură stocată şi pentru a reveni retur de valori şi întoarce parametri, inclusiv:
  • Utilizaţi un obiect set acoperire de date pentru a strânge rândurile returnate şi să lucreze cu aceste rânduri în plus faţă de valorile retur şi parametrii retur.
  • Utilizaţi un obiect DataReader să adune rânduri returnate, pentru a vă deplasa prin aceste rânduri, şi apoi a aduna retur valorile și parametrii retur.
  • Utilizaţi metoda ExecuteScalar pentru a întoarce valoarea din prima coloană a rezultatele primul rând cu valorile de returnare şi parametrii retur. Acest lucru este cel mai util cu funcţii agregate.
  • Utilizaţi metoda ExecuteNonQuery pentru a reveni numai parametrii retur şi valorile retur. Orice rânduri returnate sunt abandonate. Aceasta este utilă pentru executarea de interogări de acţiune.
Acest articol demonstrează ultimele trei metode şi utilizează atât SqlCommand , cât şi obiectele OleDbCommand . Asiguraţi-vă că copiaţi numai codul pentru furnizor gestionate pe care îl utilizaţi. Dacă nu sunteţi sigur ce furnizor de gestionat ar trebui să utilizaţi, vizitaţi următorul site Reţea Microsoft pentru dezvoltatori Web:În fiecare din probe în acest articol, parametrii sunt adăugate la colecţie parametrii de obiectul de comandă . Când utilizaţi obiectul SqlCommand , nu au adăugaţi parametrii în orice ordine special, dar parametrii trebuie să aibă nume de sign-in corect. Când utilizaţi obiectul OleDbCommand , trebuie să adăugaţi parametrii în ordinea corectă, şi nu se poate utiliza parametrii de nume.

back to the top

Utilizaţi DataReader pentru a reveni rânduri şi parametrii

Utilizaţi obiectul DataReader pentru a reveni doar-în-citire, forward-only flux acoperire de date. Informațiile care conţine DataReader poate veni de la o procedură stocată. Acest exemplu utilizează obiectul DataReader pentru a executa o procedură stocată care are o intrare şi un parametru de ieşire şi apoi se mută prin înregistrările returnate pentru a vizualiza parametrii de retur.
  1. Creaţi următoarea procedură stocată pe server care se 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 onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINset @numTitlesOUT = @@Rowcountreturn (5) 					
  2. Creaţi un nou Visual C#.NET Windows aplicarea proiectului.
  3. Utilizaţi instrucţiunea folosind în sistem şi spaţiile de nume System.Data astfel încât să nu aveţi pentru a se califica declarațiile în aceste spaţii de nume, mai târziu în codul. Adauga acest cod în partea de sus a forma codul modulului. Asiguraţi-vă că copiaţi numai codul pentru furnizorul care l-aţi ales.SQL Client
    using System.Data.SqlClient;					
    OLE DB date furnizor
    using System.Data.OleDb;					
  4. Înlocuiţi codul în evenimentul Form_Load private cu următorul 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);					
    OLE DB date furnizor
    OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;OleDbParameter NumTitles = testCMD.Parameters.Add    ("@numtitlesout", OleDbType.VarChar, 11);NumTitles.Direction = ParameterDirection.Output;        IdIn.Value = "213-46-8915";PubsConn.Open();OleDbDataReader 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. Modifica şirul de conexiune pentru obiectul conexiune la punctul pe computerul care execută SQL Server.
  6. Executaţi codul. Observaţi că DataReader preia înregistrările şi apoi întoarce valorile parametrilor. Utilizaţi metoda de citire a obiectului DataReader să deplasaţi prin înregistrările returnate.

    Fereastra de ieşire afişează titlurile de două cărţi, valoarea returnată de 5, şi parametrul de ieşire, care conţine numărul de înregistrări (2). Observaţi că trebuie să închideţi DataReader în codul pentru a vedea valorile parametrilor. În plus, reţineţi că nu aveţi pentru a trece prin toate înregistrările pentru a vedea parametri retur dacă DataReader este închis.
back to the top

Utilizaţi metoda ExecuteScalar obiectului comanda

Utilizaţi metoda ExecuteScalar de obiectul de comandă pentru a prelua valorile parametrilor. În plus, ExecuteScalar returnează prima coloană din primul rând al procedura stocată. Aceasta este utilă pentru funcţii agregate, ca în exemplul următor.
  1. Creaţi următoarea procedură stocată pe server care execută SQL Server:
    Create Procedure TestProcedure2(  @au_idIN varchar (11))As/* set nocount on */ select count (T.title) from authors as A join titleauthor as TA onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINReturn(5)					
  2. Creaţi un nou Visual C#.NET Windows aplicarea proiectului.
  3. Utilizaţi instrucţiunea folosind în sistem şi spaţiile de nume System.Data astfel încât să nu aveţi pentru a se califica declarațiile în aceste spaţii de nume, mai târziu în codul. Adauga acest cod în partea de sus a forma codul modulului. Asiguraţi-vă că copiaţi numai codul pentru furnizorul care l-aţi ales.SQL Client
    using System.Data.SqlClient;					
    OLE DB date furnizor
    using System.Data.OleDb;					
  4. Adăugaţi următorul cod la 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);					
    OLE DB date furnizor
    string strCount;OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure2", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.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. Modifica şirul de conexiune pentru obiectul conexiune la punctul pe computerul care execută SQL Server.
  6. Executaţi codul. Observaţi că metoda ExecuteScalar de obiect comanda Întoarce parametrii. ExecuteScalar , de asemenea, întoarce valoarea din coloana 1, rândul 1 de rowset returnate. Prin urmare, valoarea intCount este rezultatul de funcţia count din procedura stocată.
back to the top

Utilizaţi metoda ExecuteNonQuery obiectului comanda

Acest eşantion utilizează metoda ExecuteNonQuery pentru a executa interogarea şi să se întoarcă valorile parametrilor. ExecuteNonQuery întoarce, de asemenea, numărul de înregistrări care sunt afectate după ce se execută interogarea. Cu toate acestea, ExecuteNonQuery nu returnează toate rândurile sau coloanele din procedura stocată.

Metoda ExecuteNonQuery este foarte utilă când utilizaţi declaraţii INSERT, UPDATE sau DELETE dacă aveţi numai să ştie câte rânduri sunt modificate. Într-o procedură stocată în care utilizaţi numai o instrucţiune SELECT, primiţi -1 deoarece nu rânduri sunt afectate de interogarea.
  1. Creaţi următoarea procedură stocată pe computer 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_fnamwhere au_id = @au_idin	return (5)					
  2. Creaţi un nou Visual C#.NET Windows aplicarea proiectului.
  3. Utilizaţi instrucţiunea folosind în sistem şi spaţiile de nume System.Data astfel încât să nu aveţi pentru a se califica declarațiile în aceste spaţii de nume, mai târziu în codul. Adauga acest cod în partea de sus a forma codul modulului. Asiguraţi-vă că copiaţi numai codul pentru furnizorul care l-aţi ales.SQL Client
    using System.Data.SqlClient;					
    OLE DB date furnizor
    using System.Data.OleDb;					
  4. Înlocuiţi codul de mai jos evenimentul Form1_Load private în modulul de cod Form1 cu următorul 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);					
    OLE DB date furnizor
    int intRowAffected;OleDbConnection PubsConn = new OleDbConnection    ("Provider=SQLOLEDB;Data Source=server;" +    "integrated Security=sspi;initial catalog=pubs;");OleDbCommand testCMD = new OleDbCommand    ("TestProcedure3", PubsConn);testCMD.CommandType = CommandType.StoredProcedure;OleDbParameter RetVal = testCMD.Parameters.Add    ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;OleDbParameter IdIn = testCMD.Parameters.Add    ("@au_idIN", OleDbType.VarChar, 11);IdIn.Direction = ParameterDirection.Input;OleDbParameter FnameIn = testCMD.Parameters.Add   ("@au_fname", OleDbType.VarChar, 30);FnameIn.Direction = ParameterDirection.Input;IdIn.Value = "213-46-8915";FnameIn.Value = "Marjorie";PubsConn.Open();intRowAffected = testCMD.ExecuteNonQuery();Console.WriteLine("Number of Rows affected: " + intRowAffected);Console.WriteLine(RetVal.Value);					
  5. Modifica şirul de conexiune pentru obiectul conexiune la punctul pe computerul care execută SQL Server.
  6. Executaţi codul. Fereastra de ieşire afişează numărul rândurilor afectate (intRowAffect) şi valoarea parametrului retur.
back to the top
REFERINŢE
Pentru informaţii suplimentare, vizitaţi următorul site MSDN Web:back to the top

Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 310070 - Ultima examinare: 06/12/2012 03:58:00 - Revizie: 1.0

Microsoft ADO.NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

  • kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtro
Feedback