Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: .NET Framework
.NET
.NET Standard
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 CustomerID SourceColumn 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;
}