POSTUPY: Volání parametrické uložené procedury pomocí ADO.NET a Visual C# .NET

Překlady článku Překlady článku
ID článku: 310070 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Pomocí ADO.NET volání uložené procedury a vrátit vrácené hodnoty a vrátit parametry, včetně několika způsoby:
  • Použijte objekt DataSet k získání vrácených řádků a pro práci s těmito řádky vrácené hodnoty a parametry vratky.
  • Pomocí objektu DataReader shromažďování vrácených řádků, prostřednictvím těchto řádků a sbírat vrácené hodnoty a parametry vratky.
  • Použití ExecuteScalar metoda vrátí hodnotu z prvního sloupce výsledky první řádek vratky parametry a návratové hodnoty. To je nejužitečnější s agregační funkce.
  • Pomocí metody ExecuteNonQuery vrátit pouze vratky parametry a návratové hodnoty. Budou odstraněny všechny řádky vrácené. To je nejužitečnější pro provádění akční dotazy.
Tento článek ukazuje poslední tři metody a používá SqlCommand a objekty OleDbCommand . Přesvědčte se, zda kopírovat pouze kód spravovaného zprostředkovatele, který používáte. Pokud si nejste jisti, který spravovaného zprostředkovatel, byste měli použít, navštivte následující webu Microsoft Developer Network:
Zprostředkovatele dat .NET
Všechny příklady v tomto článku parametry jsou přidány do kolekce parametrůpříkazu objektu. Při použití objektu SqlCommand nebude mít přidání parametrů v libovolném pořadí, ale parametry musí mít správný název. Při použití OleDbCommand objektu, je nutné přidat parametry ve správném pořadí a nelze použít parametry podle názvu.

Pomocí objektu DataReader vrátit řádky a parametry

Vrátit datový proud pouze pro čtení, pouze pro předávání dat, můžete použít objekt DataReader . Informace, které obsahuje objekt DataReader mohou pocházet z uložené procedury. Tento příklad používá ke spuštění uložené procedury, která má vstupní a výstupní parametr a prochází vrácené záznamy vracené parametry zobrazení objektu DataReader .
  1. Na serveru se systémem Microsoft SQL Server, vytvořte následující uložené procedury:
    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. Vytvořte nový projekt Visual C# .NET aplikace Windows.
  3. Použijte příkaz pomocísystému a obory názvů System.Data , takže není nutné kvalifikovat deklarace v těchto oborů názvů později v kódu. Přidáte tento kód do horní části modulu kódu formuláře. Ujistěte se, chcete-li kopírovat pouze kód pro poskytovatele, který jste zvolili.Klient SQL
    using System.Data.SqlClient;
    					
    Zprostředkovatel dat OLE DB
    using System.Data.OleDb;
    					
  4. Nahradit kód v soukromé události Form_Load následující kód:Klient SQL
    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);
    					
    Zprostředkovatel dat OLE DB
    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. Upravte připojovací řetězec pro objekt připojení přejděte na počítač, který je spuštěn SQL Server.
  6. Spustíte kód. Všimněte si, že objekt DataReader načítá záznamy a vrátí hodnoty parametrů. Procházet vrácených záznamů, můžete použít metodu čtení objektu DataReader .

    Okno výstup zobrazuje názvy dvou knih, vrácená hodnota 5 a výstupní parametr, který obsahuje počet záznamů (2). Všimněte si, že je třeba zavřít DataReader v kódu zobrazit hodnoty parametru. Poznámka: Kromě toho, že není nutné procházet všechny záznamy zobrazíte vracené parametry zavřeno objekt DataReader .

Použití ExecuteScalar metoda objektu Command

ExecuteScalar metoda objektu příkaz slouží k načtení hodnot parametrů. Navíc ExecuteScalar vrátí první sloupec první řádek uložené procedury. To je nejužitečnější pro agregační funkce jako v následujícím příkladu.
  1. Na serveru se systémem SQL Server, vytvořte následující uložené procedury:
    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. Vytvořte nový projekt Visual C# .NET aplikace Windows.
  3. Použijte příkaz pomocísystému a obory názvů System.Data , takže není nutné kvalifikovat deklarace v těchto oborů názvů později v kódu. Přidáte tento kód do horní části modulu kódu formuláře. Přesvědčte se, zda kopírovat pouze kód pro poskytovatele, který jste vybrali.Klient SQL
    using System.Data.SqlClient;
    					
    Zprostředkovatel dat OLE DB
    using System.Data.OleDb;
    					
  4. Přidejte následující kód k události Form_Load :Klient SQL
    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);
    					
    Zprostředkovatel dat OLE DB
    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. Upravte připojovací řetězec pro objekt připojení přejděte na počítač, který je spuštěn SQL Server.
  6. Spustíte kód. Všimněte si, že ExecuteScalar metoda objektu příkaz vrátí parametry. ExecuteScalar také vrátí hodnotu 1, řádek 1 sady řádků vrácených sloupec. Hodnota intCount je tedy výsledek funkce Počet z uložené procedury.

Použití ExecuteNonQuery metoda objektu Command

V tomto příkladu ExecuteNonQuery metoda spuštění dotazu a vrácení hodnoty parametrů. ExecuteNonQuery rovněž vrací počet záznamů, které budou po spuštění dotazu ovlivněna. Nicméně ExecuteNonQuery nevrátí žádné řádky nebo sloupce z uložené procedury.

ExecuteNonQuery metoda je nejužitečnější, pokud potřebujete vědět, kolik řádků se změní použijete příkazy INSERT, UPDATE nebo DELETE. V uložené proceduře, ve kterém používáte pouze příkaz SELECT zobrazí hodnotu -1, protože dotazem ovlivněny žádné řádky.
  1. V počítači se systémem SQL Server, vytvořte následující uložené procedury:
    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. Vytvořte nový projekt Visual C# .NET aplikace Windows.
  3. Použijte příkaz pomocísystému a obory názvů System.Data , takže není nutné kvalifikovat deklarace v těchto oborů názvů později v kódu. Přidáte tento kód do horní části modulu kódu formuláře. Přesvědčte se, zda kopírovat pouze kód pro poskytovatele, který jste vybrali.Klient SQL
    using System.Data.SqlClient;
    					
    Zprostředkovatel dat OLE DB
    using System.Data.OleDb;
    					
  4. Následující soukromé události Form1_Load v modulu kódu Form1 kód nahradit následující kód:Klient SQL
    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);
    					
    Zprostředkovatel dat OLE DB
    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. Upravte připojovací řetězec pro objekt připojení přejděte na počítač, který je spuštěn SQL Server.
  6. Spustíte kód. Okno výstup zobrazuje počet ovlivněné řádky (intRowAffect) a hodnotu návratový parametr.

Odkazy

Další informace naleznete na následujících webech MSDN:
Základní informace o knihovně tříd rozhraní.NET Framework

Načítání dat pomocí objektu DataReader

Vlastnosti

ID článku: 310070 - Poslední aktualizace: 28. října 2013 - Revize: 5.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Klíčová slova: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 310070

Dejte nám zpětnou vazbu

 

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