PROCEDURA: Chiamare una Stored Procedure con parametri utilizzando ADO.NET e Visual c#.NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 310070 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato precedentemente pubblicato con il codice di riferimento I310070
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Esistono diversi modi per utilizzare ADO.NET per chiamare una stored procedure e per ottenere valori e parametri, inclusi:
  • Utilizzare un oggetto DataSet per raccogliere le righe restituite e lavorare con queste righe oltre ai valori restituiti e parametri restituiti.
  • Utilizzare un oggetto DataReader per raccogliere le righe restituite, spostarsi attraverso queste righe e quindi raccogliere valori e parametri restituiti.
  • Utilizzare il metodo ExecuteScalar per restituire il valore dalla prima colonna della prima riga di risultati con i valori restituiti e parametri restituiti. Questo risulta particolarmente utile con le funzioni di aggregazione.
  • Utilizzare il metodo ExecuteNonQuery per restituire solo i parametri e valori restituiti. Eventuali righe restituite vengono scartate. Questo risulta particolarmente utile per l'esecuzione di query di comando.
In questo articolo vengono illustrati gli ultimi tre metodi e utilizzati SqlCommand e gli oggetti OleDbCommand . Assicurarsi di copiare solo il codice per il provider di dati che si sta utilizzando. Se non si è certi di quale provider gestito da utilizzare, visitare il seguente sito Web Microsoft Developer Network:
.NET Data provider
In tutti gli esempi di questo articolo, i parametri vengono aggiunti all'insieme Parameters dell'oggetto Command . Quando si utilizza l'oggetto SqlCommand , non è necessario aggiungere i parametri in un ordine specifico, ma i parametri devono avere il nome corretto. Quando si utilizza l'oggetto OleDbCommand , è necessario aggiungere i parametri nell'ordine corretto e non è possibile utilizzare i parametri per nome.

Utilizzo di DataReader per restituire righe e parametri

È possibile utilizzare l'oggetto DataReader per restituire un flusso di sola lettura, forward-only di dati. Le informazioni che contiene l' oggetto DataReader possono provenire da una stored procedure. In questo esempio viene utilizzato l'oggetto DataReader per eseguire una stored procedure che dispone di un parametro di input e output e quindi per scorrere i record restituiti per visualizzare i parametri restituiti.
  1. Creare la stored procedure seguente sul server che esegue 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. Creare un nuovo progetto Visual c#.Progetto applicazione Windows di NET.
  3. In modo che non sia necessario qualificare dichiarazioni in tali spazi dei nomi nel codice, utilizzare l'istruzione using sul sistema e gli spazi dei nomi System. Data . Aggiungere il seguente codice nella parte superiore del modulo di codice. Assicurarsi di copiare solo il codice per il provider scelto.SQL Client
    using System.Data.SqlClient;
    					
    Provider di dati DB OLE
    using System.Data.OleDb;
    					
  4. Sostituire il codice nell'evento Form_Load privata con il seguente codice:Client 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);
    					
    Provider di dati DB OLE
    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. Modificare la stringa di connessione per l'oggetto di connessione a computer che esegue SQL Server.
  6. Eseguire il codice. Si noti che l' oggetto DataReader recupera i record e quindi restituisce i valori dei parametri. È possibile utilizzare il metodo di lettura dell'oggetto DataReader per spostarsi tra i record restituiti.

    Nella finestra di Output vengono visualizzati i titoli di due libri, il valore restituito di 5 e il parametro di output, che contiene il numero di record (2). Si noti che è necessario chiudere l' oggetto DataReader nel codice per visualizzare i valori di parametro. Si noti, inoltre, non è necessario spostarsi tra tutti i record per visualizzare i parametri restituiti se il DataReader non viene chiuso.

Utilizzare il metodo ExecuteScalar dell'oggetto Command

È possibile utilizzare il metodo ExecuteScalar dell'oggetto Command per recuperare i valori di parametro. Inoltre, ExecuteScalar restituisce la prima colonna della prima riga della stored procedure. Questo risulta particolarmente utile per le funzioni di aggregazione come illustrato nell'esempio riportato di seguito.
  1. Creare la stored procedure seguente sul server che esegue 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. Creare un nuovo progetto Visual c#.Progetto applicazione Windows di NET.
  3. In modo che non sia necessario qualificare dichiarazioni in tali spazi dei nomi nel codice, utilizzare l'istruzione using sul sistema e gli spazi dei nomi System. Data . Aggiungere il seguente codice nella parte superiore del modulo di codice. Assicurarsi di copiare solo il codice per il provider scelto.SQL Client
    using System.Data.SqlClient;
    					
    Provider di dati DB OLE
    using System.Data.OleDb;
    					
  4. Aggiungere il codice seguente all'evento Form_Load :Client 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);
    					
    Provider di dati DB OLE
    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. Modificare la stringa di connessione per l'oggetto di connessione a computer che esegue SQL Server.
  6. Eseguire il codice. Si noti che il metodo ExecuteScalar dell'oggetto Command restituisce i parametri. Restituisce inoltre il valore della colonna 1, riga 1 del set di righe restituito. Di conseguenza, il valore di intCount è il risultato della funzione count dalla stored procedure.

Utilizzare il metodo ExecuteNonQuery dell'oggetto Command

In questo esempio viene utilizzato il metodo ExecuteNonQuery per eseguire la query e restituire i valori dei parametri. ExecuteNonQuery restituisce anche il numero di record modificati dopo l'esecuzione della query. ExecuteNonQuery restituisce tuttavia eventuali righe o colonne dalla stored procedure.

Il metodo ExecuteNonQuery è particolarmente utile quando si utilizzano istruzioni INSERT, UPDATE o DELETE se è necessario conoscere il numero di righe modificato. In una stored procedure in cui si utilizza solo un'istruzione SELECT, viene restituito -1 poiché nessuna riga è stata modificata dalla query.
  1. Creare la stored procedure seguente nel computer in cui è in esecuzione di 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. Creare un nuovo progetto Visual c#.Progetto applicazione Windows di NET.
  3. In modo che non sia necessario qualificare dichiarazioni in tali spazi dei nomi nel codice, utilizzare l'istruzione using sul sistema e gli spazi dei nomi System. Data . Aggiungere il seguente codice nella parte superiore del modulo di codice. Assicurarsi di copiare solo il codice per il provider scelto.SQL Client
    using System.Data.SqlClient;
    					
    Provider di dati DB OLE
    using System.Data.OleDb;
    					
  4. Sostituire il codice riportato di seguito l'evento Form1_Load privata nel modulo di codice Form1 con il seguente codice:Client 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);
    					
    Provider di dati DB OLE
    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. Modificare la stringa di connessione per l'oggetto di connessione a computer che esegue SQL Server.
  6. Eseguire il codice. Nella finestra di Output viene visualizzato il numero di righe interessate (intRowAffect) e il valore del parametro restituito.

Riferimenti

Per ulteriori informazioni, visitare il seguente sito Web MSDN:
Introduzione ai.NET Framework Class Library

Recupero di dati mediante DataReader

Proprietà

Identificativo articolo: 310070 - Ultima modifica: martedì 12 giugno 2012 - Revisione: 1.0
Le informazioni in questo articolo si applicano a:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Chiavi: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 310070
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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