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

Traduceri articole Traduceri articole
ID articol: 310070 - View products that this article applies to.
Măriți totul | Reduceți totul

În această pagină

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:
.Furnizorilor acoperire de date NET
Î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.

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 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) 
    					
  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.

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 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. 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ă.

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_fnam
    where 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.

REFERINȚE

Pentru informații suplimentare, vizitați următorul site MSDN Web:
Introducere.NET Framework Class Library

Regăsirea datelor utilizând DataReader

Proprietă?i

ID articol: 310070 - Ultima examinare: 12 iunie 2012 - Revizie: 1.0
SE APLICĂ LA:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Cuvinte cheie: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtro
Traducere automată
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

Trimite?i feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com