Idioma

Executando um comando

Cada fornecedor de dados ADO.NET tem o seu próprio objeto de comando que herda de DbCommand. O .NET Framework Data Provider para OLE DB inclui um objeto OleDbCommand, Microsoft.Data.SqlClient inclui um objeto SqlCommand, o .NET Framework Data Provider para ODBC inclui um objeto OdbcCommand, e o .NET Framework Data Provider para Oracle inclui um objeto OracleCommand. Cada um desses objetos expõe métodos para executar comandos com base no tipo de comando e no valor de retorno desejado, conforme descrito na tabela a seguir.

Comando Valor de retorno
ExecuteReader Retorna um objeto DataReader.
ExecuteScalar Retorna um único valor escalar.
ExecuteNonQuery Executa um comando que não retorna nenhuma linha.
ExecuteXMLReader Retorna um XmlReader. Disponível apenas para um objeto SqlCommand.

Cada objeto de comando fortemente tipado também oferece suporte a uma enumeração CommandType que especifica como uma cadeia de caracteres de comando é interpretada, conforme descrito na tabela a seguir.

Tipo de comando Descrição
Text Um comando SQL que define as instruções a serem executadas na fonte de dados.
StoredProcedure O nome do procedimento armazenado. Você pode usar a propriedade Parameters de um comando para acessar parâmetros de entrada e saída e valores de retorno, independentemente de qual método Execute é chamado. Ao usar ExecuteReader, os valores de retorno e os parâmetros de saída não estarão acessíveis até que o DataReader seja fechado.
TableDirect O nome de uma tabela.

Exemplo

O exemplo de código a seguir demonstra como criar um objeto SqlCommand para executar um procedimento armazenado definindo suas propriedades. Um objeto SqlParameter é usado para especificar o parâmetro de entrada para o procedimento armazenado. O comando é executado usando o método ExecuteReader e a saída do SqlDataReader é exibida na janela do console.

static void GetSalesByCategory(string connectionString,
    string categoryName)
{
    using (SqlConnection connection = new(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new()
        {
            Connection = connection,
            CommandText = "SalesByCategory",
            CommandType = CommandType.StoredProcedure
        };

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

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

        // Open the connection and execute the reader.
        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Console.WriteLine($"{reader[0]}: {reader[1]:C}");
                }
            }
            else
            {
                Console.WriteLine("No rows found.");
            }
            reader.Close();
        }
    }
}
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()
        Using 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 Using
End Sub

Comandos de solução de problemas

Microsoft.Data.SqlClient expõe contadores de desempenho do Windows no .NET Framework e EventCounters no .NET moderno. Para mais informações, consulte Contadores de Desempenho.

Ver também