Compartilhar via


Parâmetros de DataAdapter

Aplicável a: .NET Framework .NET .NET Standard

Baixar ADO.NET

O DbDataAdapter tem quatro propriedades que são usadas para recuperar dados da fonte de dados e atualizá-los nela: a propriedade SelectCommand retorna dados da fonte de dados; e as propriedades InsertCommand, UpdateCommand e DeleteCommand são usadas para gerenciar alterações na fonte de dados.

Observação

A propriedade SelectCommand deve ser definida antes que você chame o método Fill do DataAdapter. A propriedade InsertCommand, UpdateCommand ou DeleteCommand deve ser definida antes que o método Update do DataAdapter seja chamado, dependendo de quais alterações foram feitas nos dados da DataTable. Por exemplo, se as linhas tiverem sido adicionadas, o InsertCommand deve ser definido antes de chamar Update. Quando Update estiver processando uma linha inserida, atualizada ou excluída, o DataAdapter usará a respectiva propriedade Command para processar a ação. As informações atuais sobre a linha modificada são passadas para o objeto Command através da coleção Parameters.

Ao atualizar uma linha da fonte de dados, você chama a instrução UPDATE, que usa um identificador exclusivo para identificar a linha da tabela a ser atualizada. O identificador exclusivo é geralmente o valor de um campo de chave primária. A instrução UPDATE usa os parâmetros que contêm o identificador exclusivo e as colunas e os valores a serem atualizados, conforme mostrado na declaração Transact-SQL a seguir.

UPDATE Customers SET CompanyName = @CompanyName
  WHERE CustomerID = @CustomerID  

Observação

A sintaxe para espaços reservados de parâmetro depende da fonte de dados. Este exemplo mostra os espaços reservados de uma fonte de dados do SQL Server.

Neste exemplo, o campo CompanyName é atualizado com o valor do parâmetro @CompanyName na linha em que CustomerID é igual ao valor do parâmetro @CustomerID. Os parâmetros recuperam informações da linha modificada usando a propriedade SourceColumn do objeto SqlParameter. Estes são os parâmetros da instrução UPDATE de exemplo anterior. O código assume que a variável adapter representa um objeto SqlDataAdapter válido.

// Assumes that connection is a valid SqlAdapter object
adapter.UpdateCommand.Parameters.Add("@CompanyName", 
            SqlDbType.VarChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@CustomerID",
            SqlDbType.Char, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;

O método Add da coleção Parameters adota o nome do parâmetro, o tipo de dados, o tamanho (se aplicável ao tipo) e o nome da SourceColumn da DataTable. Observe que SourceVersion do parâmetro @CustomerID é definido como Original. Isso garante que a linha existente na fonte de dados será atualizada se o valor da(s) coluna(s) de identificação tiverem sido alteradas na DataRow modificada. Nesse caso, o valor de linha Original corresponderia ao valor atual na fonte de dados, e o valor de linha Current conteria o valor atualizado. A SourceVersion do parâmetro @CompanyName não está definida e usa o padrão, o valor de linha Current.

Observação

Para ambas as operações Fill dos métodos DataAdapter e Get do DataReader, o tipo .NET é inferido do tipo retornado do Provedor de Dados Microsoft SqlClient para SQL Server. Os tipos .NET inferidos e os métodos acessadores para tipos de dados do Microsoft SQL Server são descritos nos Mapeamentos do Tipo de Dados do ADO.NET.

Parameter.SourceColumn, Parameter.SourceVersion

A SourceColumn e a SourceVersion podem ser passadas como argumentos para o construtor Parameter ou definidas como propriedades de um Parameter existente. A SourceColumn é o nome da DataColumn da DataRow, em que o valor do Parameter será recuperado. A SourceVersion especifica a versão da DataRow que o DataAdapter usa para recuperar o valor.

A tabela a seguir mostra os valores de enumeração DataRowVersion disponíveis para uso com a SourceVersion.

Enumeração DataRowVersion Descrição
Current O parâmetro usa o valor atual da coluna. Este é o padrão.
Default O parâmetro usa o DefaultValue da coluna.
Original O parâmetro usa o valor original da coluna.
Proposed O parâmetro usa um valor proposto.

O exemplo de código SqlClient na seção a seguir define um parâmetro para um UpdateCommand em que a coluna CustomerID é usada como SourceColumn de dois parâmetros: @CustomerID (SET CustomerID = @CustomerID) e @OldCustomerID (WHERE CustomerID = @OldCustomerID). O parâmetro @CustomerID é usado para atualizar a coluna CustomerID com o valor atual em DataRow. Como resultado, a SourceColumn CustomerID com uma SourceVersion de Current é usada. O parâmetro @OldCustomerID é usado para identificar a linha atual na fonte de dados. Como o valor de coluna correspondente é encontrado na versão Original da linha, a mesma SourceColumn (CustomerID) com uma SourceVersion de Original é usada.

Trabalhar com parâmetros do SqlClient

O exemplo a seguir demonstra como criar um SqlDataAdapter e definir MissingSchemaAction para AddWithKey a fim de recuperar informações adicionais do esquema no banco de dados. O conjunto de propriedades SelectCommand, InsertCommand, UpdateCommand e DeleteCommand e os objetos SqlParameter correspondentes adicionados à coleção Parameters. O método retorna um objeto SqlDataAdapter.

public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
    // Assumes that connection is a valid SqlConnection object
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

    // Create the commands.
    adapter.SelectCommand = new SqlCommand(
        "SELECT CustomerID, CompanyName FROM CUSTOMERS", connection);
    adapter.InsertCommand = new SqlCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (@CustomerID, @CompanyName)", connection);
    adapter.UpdateCommand = new SqlCommand(
        "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
        "WHERE CustomerID = @oldCustomerID", connection);
    adapter.DeleteCommand = new SqlCommand(
        "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);

    // Create the parameters.
    adapter.InsertCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.InsertCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");

    adapter.UpdateCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.UpdateCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");
    adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    adapter.DeleteCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    return adapter;
}

Confira também