Al momento sei offline in attesa che la connessione Internet venga ristabilita

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

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I310070
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
Per Visual Basic un Microsoft.NET versione di questo articolo, vedere 308049.
Per a Microsoft Visual C++.NET versione di questo articolo, vedere 310071.
Per a Microsoft Visual j#.NET versione di questo articolo, vedere 320627.

In questo articolo si riferisce la seguente documentazione Microsoft.NET Framework Class Library gli spazi dei nomi:
  • System.Data.SqlClient
  • System.Data.OleDb

IN QUESTA ATTIVITÀ

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

back to the top

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 onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINset @numTitlesOUT = @@Rowcountreturn (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.
back to the top

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 onA.au_id=TA.au_idjoin titles as Ton T.title_id=TA.title_idwhere A.au_id=@au_idINReturn(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.
back to the top

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_fnamwhere 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.
back to the top
Riferimenti
Per ulteriori informazioni, visitare il seguente sito Web MSDN:back to the top

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 310070 - Ultima revisione: 06/12/2012 03:54:00 - Revisione: 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 KbMtit
Feedback
/html>mp;t=">