Share via


Executando um comando

Cada provedor de dados do .NET Framework incluído com o .NET Framework tem seu próprio objeto de comando que herda do DbCommand. O Provedor de Dados do .NET Framework para OLE DB inclui um OleDbCommand objeto, o Provedor de Dados do .NET Framework para SQL Server inclui um SqlCommand objeto, o Provedor de Dados do .NET Framework para ODBC inclui um OdbcCommand objeto e o Provedor de Dados do .NET Framework para Oracle inclui um OracleCommand objeto. 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 Devolver Valor
ExecuteReader Retorna um DataReader objeto.
ExecuteScalar Retorna um único valor escalar.
ExecuteNonQuery Executa um comando que não retorna nenhuma linha.
ExecuteXMLReader Devolve um XmlReaderficheiro . Disponível apenas para um SqlCommand objeto.

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

Tipo de comando Description
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 Parameters propriedade de um comando para acessar parâmetros de entrada e saída e valores de retorno, independentemente do método chamado Execute . Ao usar ExecuteReadero , 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 SqlCommand objeto para executar um procedimento armazenado definindo suas propriedades. Um SqlParameter objeto é usado para especificar o parâmetro de entrada para o procedimento armazenado. O comando é executado usando o ExecuteReader método e a SqlDataReader saída do é 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("{0}: {1:C}", reader[0], reader[1]);
                }
            }
            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

O Provedor de Dados do .NET Framework para SQL Server adiciona contadores de desempenho para permitir que você detete problemas intermitentes relacionados a execuções de comando com falha. Para obter mais informações, consulte Contadores de desempenho.

Consulte também