Condividi tramite


Esecuzione di un comando (ADO.NET)

In ogni provider di dati .NET Framework fornito con .NET Framework è incluso un oggetto comando che eredita da DbCommand. Nel provider di dati .NET Framework per OLE DB è incluso un oggetto OleDbCommand, in quello per SQL Server un oggetto SqlCommand, in quello per ODBC un oggetto OdbcCommand e in quello per Oracle un oggetto OracleCommand. Ognuno di questi oggetti espone metodi per l'esecuzione di comandi in base al tipo di comando e al valore restituito desiderato, come descritto nella tabella seguente.

Comando

Valore restituito

ExecuteReader

Restituisce un oggetto DataReader.

ExecuteScalar

Restituisce un singolo valore scalare.

ExecuteNonQuery

Esegue un comando che non restituisce righe.

ExecuteXMLReader

Restituisce un oggetto XmlReader. Disponibile solo per un oggetto SqlCommand.

Ogni oggetto comando fortemente tipizzato supporta anche un'enumerazione CommandType che specifica la modalità di interpretazione di una stringa di comando, come descritto nella tabella seguente.

CommandType

Descrizione

Text

Comando SQL che definisce le istruzioni da eseguire nell'origine dati.

StoredProcedure

Nome della stored procedure. È possibile utilizzare la proprietà Parameters di un comando per accedere a parametri di input e output e a valori restituiti indipendentemente dal metodo Execute chiamato. Quando si utilizza ExecuteReader, non è possibile accedere ai valori restituiti e ai parametri di output fino a quando DataReader non viene chiuso.

TableDirect

Nome di una tabella.

Esempio

Nell'esempio di codice seguente viene illustrato come creare un oggetto SqlCommand per eseguire una stored procedure impostando le relative proprietà. Per specificare il parametro di input per la stored procedure, viene utilizzato un oggetto SqlParameter. Il comando viene eseguito utilizzando il metodo ExecuteReader e l'output di SqlDataReader viene visualizzato nella finestra della console.

Shared Sub GetSalesByCategory(ByVal connectionString As String, _
    ByVal categoryName As String)

    Using connection As New SqlConnection(connectionString)

        ' Create the command and set its properties.
        Dim command As SqlCommand = New SqlCommand()
        command.Connection = connection
        command.CommandText = "SalesByCategory"
        command.CommandType = CommandType.StoredProcedure

        ' Add the input parameter and set its properties.
        Dim parameter As New SqlParameter()
        parameter.ParameterName = "@CategoryName"
        parameter.SqlDbType = SqlDbType.NVarChar
        parameter.Direction = ParameterDirection.Input
        parameter.Value = categoryName

        ' Add the parameter to the Parameters collection.
        command.Parameters.Add(parameter)

        ' Open the connection and execute the reader.
        connection.Open()
        Dim reader As SqlDataReader = command.ExecuteReader()

        If reader.HasRows Then
            Do While reader.Read()
                Console.WriteLine("{0}: {1:C}", _
                  reader(0), reader(1))
            Loop
        Else
            Console.WriteLine("No rows returned.")
        End If
    End Using
End Sub
static void GetSalesByCategory(string connectionString, 
    string categoryName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "SalesByCategory";
        command.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        SqlParameter parameter = new SqlParameter();
        parameter.ParameterName = "@CategoryName";
        parameter.SqlDbType = SqlDbType.NVarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = categoryName;

        // Add the parameter to the Parameters collection. 
        command.Parameters.Add(parameter);

        // Open the connection and execute the reader.
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
            }
        }
        else
        {
            Console.WriteLine("No rows found.");
        }
        reader.Close();
    }
}

Risoluzione dei problemi dei comandi

Con il provider di dati .NET Framework per SQL Server vengono aggiunti contatori delle prestazioni che consentono l'individuazione dei problemi intermittenti relativi a comandi non eseguiti correttamente. Per ulteriori informazioni, vedere Contatori delle prestazioni (ADO.NET).

Vedere anche

Altre risorse

Comandi e parametri (ADO.NET)

DataAdapter e DataReader (ADO.NET)

Working with DataReaders