Os parâmetros do DataAdapter

Aplica-se a: .NET Framework .NET .NET Standard

Baixar ADO.NET

O DbDataAdapter tem quatro propriedades que são usadas para recuperar dados e atualizar dados para a fonte de dados: a SelectCommand propriedade retorna dados da fonte de dados e as propriedades , InsertCommande UpdateCommand e DeleteCommand são usadas para gerenciar alterações na fonte de dados.

Observação

A SelectCommand propriedade deve ser definida antes de chamar o Fill método do DataAdapter. As propriedades InsertCommand, UpdateCommand ou DeleteCommand têm de ser definidas antes de o método Update de DataAdapter ser chamado, consoante as alterações efetuadas aos dados em DataTable. Por exemplo, se tiverem sido adicionadas linhas, `InsertCommand` tem de ser definido antes de chamar `Update`. Quando Update está processando uma linha inserida, atualizada ou excluída, o DataAdapter usa a respetiva Command propriedade para processar a ação. As informações atuais sobre a linha modificada são passadas para o Command objeto através da Parameters coleção.

Quando atualiza uma linha na fonte de dados, chama a UPDATE instrução, que utiliza um identificador único para identificar a linha na tabela a atualizar. O identificador exclusivo é normalmente o valor de um campo de chave primária. A UPDATE instrução utiliza parâmetros que contêm tanto o identificador único como as colunas e valores a atualizar, como mostrado na seguinte declaração Transact-SQL.

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

Observação

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

Neste exemplo, o CompanyName campo é atualizado com o valor do @CompanyName parâmetro para a linha onde CustomerID é igual ao valor do @CustomerID parâmetro. Os parâmetros recuperam informações da linha modificada usando a propriedade SourceColumn do objeto SqlParameter. Seguem-se os parâmetros para a afirmação de exemplo UPDATE anterior. O código pressupõe que a variável adapter representa um objeto válido SqlDataAdapter .

// 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 aceita o nome do parâmetro, o tipo de dados, o tamanho (se aplicável ao tipo) e o nome do SourceColumn do DataTable. Observe que o SourceVersion do parâmetro @CustomerID está definido como Original. Isso garante que a linha existente na fonte de dados seja atualizada se o valor da coluna ou colunas de identificação tiver sido alterado no arquivo DataRowmodificado. Nesse caso, o valor da Original linha corresponderia ao valor atual na fonte de dados e o valor da Current linha conteria o valor atualizado. O SourceVersion do parâmetro @CompanyName não está definido e utiliza o valor predefinido, o valor da linha Current.

Observação

Para tanto as Fill operações do DataAdapter como os Get métodos do DataReader, o tipo .NET é inferido a partir do tipo retornado pelo Microsoft SqlClient Data Provider for SQL Server. Os tipos .NET inferidos e os métodos de acessor para os tipos de dados do Microsoft SQL Server são descritos em Data Type Mappings in ADO.NET.

Parameter.SourceColumn (coluna de origem), Parameter.SourceVersion (versão de origem)

O SourceColumn e SourceVersion pode ser passado como argumentos para o Parameter construtor, ou definido como propriedades de um existente Parameter. O SourceColumn é o nome do DataColumn do DataRow de onde será obtido o valor de Parameter. O SourceVersion especifica a DataRow versão que o DataAdapter usa para recuperar o valor.

A tabela seguinte mostra os valores de enumeração DataRowVersion disponíveis para utilização com SourceVersion.

Enumeração de DataRowVersion Description
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 SqlClient exemplo de código na próxima seção define um parâmetro para um UpdateCommand no qual a CustomerID coluna é usada como um SourceColumn para dois parâmetros: @CustomerID (SET CustomerID = @CustomerID), e @OldCustomerID (WHERE CustomerID = @OldCustomerID). O @CustomerID parâmetro é usado para atualizar a coluna CustomerID para o valor atual no DataRow. Como resultado, o CustomerIDSourceColumn com a SourceVersion de Current é utilizado. O @OldCustomerID parâmetro é usado para identificar a linha atual na fonte de dados. Como o valor da coluna correspondente se encontra na versão Original da linha, é utilizado o mesmo SourceColumn (CustomerID) com um SourceVersion de Original.

Trabalhar com parâmetros do SqlClient

O exemplo seguinte demonstra como criar um SqlDataAdapter e definir o MissingSchemaAction como AddWithKey, de modo a obter informações adicionais sobre o esquema da base de dados. As propriedades SelectCommand, InsertCommand, UpdateCommand e DeleteCommand são definidas, e os respetivos objetos SqlParameter são adicionados à coleção Parameters. O método retorna um SqlDataAdapter objeto.

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;
}

Consulte também