AKO na TO: Volať parametrizovaných uloženej procedúry použitím ADO.NET a Visual C#.NET

Preklady článku Preklady článku
ID článku: 310070 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Existuje niekoľko spôsobov, ako použiť ADO.NET volanie uloženej procedúry s cieľom získať späť návratové hodnoty a vráti parametre vrátane:
  • Pomocou DataSet objekt zbierať vrátený riadkov a pracovať s týmito riadkami popri návratové hodnoty a návrat parametre.
  • Použiť DataReader objektu zhromaždiť vrátených riadkov sa pohybovať cez tieto riadky a potom zbierať návratové hodnoty a návrat parametre.
  • Použite metódu ExecuteScalar Ak chcete vrátiť hodnotu z prvého stĺpca výsledky prvého riadka návratové hodnoty a návrat parametre. To je najužitočnejšie s agregačných funkcií.
  • Použite metódu ExecuteNonQuery vrátiť len vrátiť parametre a návratové hodnoty. Všetky vrátené riadky sú odstránené. To je najužitočnejšie pre vykonávajúci akčné dotazy.
Tento článok ukazuje posledné tri metódy a používa SqlCommand a OleDbCommand objektov. Uistite sa, že kopírovať len kód pre riadené poskytovateľa, ktorý používate. Ak si nie ste istí, ktoré spravovaných poskytovateľa by ste mali používať, navštívte nasledujúcu lokalitu spoločnosti webová lokalita Microsoft Developer Network Web:
.Poskytovatelia NET údajov
V každej zo vzoriek v tomto článku sa parametre, ktoré sa pridávajú k zhromažďovanie parametrovpríkaz objekt. Ak použijete objekt SqlCommand , budete mať nepridávajte parametrov v konkrétnom slede, ale parametre musia mať správny názov. Ak použijete objekt OleDbCommand , musíte pridať parametre v správnom poradí a nie je možné použiť parametre s názvom.

Použite DataReader vrátiť riadkov a parametre

Môžete použiť DataReader objektu vrátiť iba na čítanie, premiestniteľným iba dopredu prúd údajov. Informácie, ktoré obsahuje DataReader môžu pochádzať z uloženej procedúry. Tento príklad používa DataReader objekt na spustenie uloženej procedúry, ktoré má vstupný a výstupný parameter a potom presunie cez vrátených záznamov chcete zobraziť návrat parametre.
  1. Vytvorenie uloženej procedúry na serveri so spustenou službou 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. Vytvoriť nový Visual C#.NET Windows aplikácií project.
  3. Použite príkaz pomocousystému a System.Data názvov tak, že nemáte nárok vyhlásenia tie priestory názvov v kóde neskôr. Pridať tento kód v hornej časti formulára kód modulu. Presvedčte sa, či chcete kopírovať len kód poskytovateľa, ktorý ste vybrali.SQL klienta
    using System.Data.SqlClient;
    					
    OLE DB údaje poskytovateľa
    using System.Data.OleDb;
    					
  4. Nahradiť kód v prípade súkromných Form_Load s nasledujúcim kódom: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 údaje poskytovateľa
    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. Upraviť reťazec pripojenia pre objekt Connection ukážte na počítač, na ktorom je spustený server SQL Server.
  6. Spustiť kód. Všimnite si, že DataReader načíta záznamy a potom ju vráti hodnoty parametrov. Čítanie metódu DataReader objektu môžete použiť na prechádzanie medzi vrátených záznamov.

    Výstupné okno zobrazí názvy dvoch kníh, vrátenú hodnotu 5 a výstupný parameter, ktorý obsahuje počet záznamov (2). Všimnite si, že musíte zatvoriť DataReader v kóde vidieť hodnoty parametrov. Okrem toho pamätajte, že nemáte prechádzať všetky záznamy zistiť návrat parametre, ak DataReader uzavrie.

Použite metódu ExecuteScalar objektu DoCmd príkaz

Na získanie hodnoty parametrov môžete použiť metódu ExecuteScalar objektu DoCmd príkaz . Okrem toho ExecuteScalar vráti prvý stĺpec prvý riadok uloženej procedúry. To je najužitočnejšie pre agregačných funkcií ako v nasledujúcom príklade.
  1. Vytvorenie uloženej procedúry na serveri so spustenou službou 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. Vytvoriť nový Visual C#.NET Windows aplikácií project.
  3. Použite príkaz pomocousystému a System.Data názvov tak, že nemáte nárok vyhlásenia tie priestory názvov v kóde neskôr. Pridať tento kód v hornej časti formulára kód modulu. Uistite sa, že kopírovať len kód poskytovateľa, ktorý ste vybrali.SQL klienta
    using System.Data.SqlClient;
    					
    OLE DB údaje poskytovateľa
    using System.Data.OleDb;
    					
  4. Pridať nasledujúci kód do Form_Load udalosti: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 údaje poskytovateľa
    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. Upraviť reťazec pripojenia pre objekt Connection ukážte na počítač, na ktorom je spustený server SQL Server.
  6. Spustiť kód. Všimnite si, že metódu ExecuteScalar objektu DoCmd príkaz vráti parametre. ExecuteScalar tiež vráti hodnotu stĺpca 1, riadok 1 vrátených riadkov. Preto hodnota intCount je výsledkom funkcia count od uloženej procedúry.

Použite metódu ExecuteNonQuery objektu DoCmd príkaz

Táto vzorka sa používa ExecuteNonQuery metóda spustite dotaz a vrátiť parametrické hodnoty. ExecuteNonQuery vráti počet záznamov, ktoré sú postihnuté po spusteného dotazu. Však ExecuteNonQuery nevráti žiadne riadky ani stĺpce z uloženej procedúry.

ExecuteNonQuery metóda je najužitočnejšia, keď použijete INSERT, UPDATE alebo DELETE výkazy, ak budete mať len vedieť, koľko riadkov sa zmenila. V uloženej procedúre, akým používate iba príkazom SELECT, budete dostávať -1, pretože žiadne riadkov ovplyvnených dotazom.
  1. Vytvorte uloženej procedúry na počítač, na ktorom je spustený server 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. Vytvoriť nový Visual C#.NET Windows aplikácií project.
  3. Použite príkaz pomocousystému a System.Data názvov tak, že nemáte nárok vyhlásenia tie priestory názvov v kóde neskôr. Pridať tento kód v hornej časti formulára kód modulu. Uistite sa, že kopírovať len kód poskytovateľa, ktorý ste vybrali.SQL klienta
    using System.Data.SqlClient;
    					
    OLE DB údaje poskytovateľa
    using System.Data.OleDb;
    					
  4. Nahradiť kód nižšie súkromné Form1_Load udalostí v module Form1 kód s nasledujúci kód: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 údaje poskytovateľa
    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. Upraviť reťazec pripojenia pre objekt Connection ukážte na počítač, na ktorom je spustený server SQL Server.
  6. Spustiť kód. Výstupné okno zobrazuje počet riadkov ovplyvnených (intRowAffect) a hodnota parametra návratu.

ODKAZY

Ďalšie informácie nájdete na nasledovných webových lokalitách MSDN:
Úvod do.NET Framework triedy knižnica

Načítanie údajov pomocou DataReader

Vlastnosti

ID článku: 310070 - Posledná kontrola: 12. júna 2012 - Revízia: 3.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Kľúčové slová: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 310070

Odošlite odozvu

 

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