Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: .NET Framework
.NET
.NET Standard
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 InsertCommandpropriedades , UpdateCommand, ou DeleteCommand devem ser definidas antes que o UpdateDataAdapter método do seja chamado, dependendo de quais alterações foram feitas nos dados no DataTable. Por exemplo, se linhas foram adicionadas, o deve ser definido antes de InsertCommand 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.
Ao atualizar uma linha na fonte de dados, você chama a instrução UPDATE, que usa um identificador exclusivo para identificar a linha na tabela a ser atualizada. O identificador exclusivo é normalmente o valor de um campo de chave primária. A instrução UPDATE usa parâmetros que contêm o identificador exclusivo e as colunas e valores a serem atualizados, conforme mostrado na instrução Transact-SQL a seguir.
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 SourceColumnSqlParameter propriedade do objeto. A seguir estão os parâmetros para a instrução UPDATE de exemplo 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 Add método da coleção leva o nome do parâmetro, o tipo de Parameters dados, o tamanho (se aplicável ao tipo) e o nome do SourceColumnDataTable. Observe que o SourceVersion do parâmetro está @CustomerID 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 parâmetro for não @CompanyName está definido e usa o valor de linha padrão. 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 de onde o DataRow valor do será recuperado Parameter . O SourceVersion especifica a DataRow versão que o DataAdapter usa para recuperar o valor.
A tabela a seguir mostra os valores de enumeração disponíveis para uso com DataRowVersiono SourceVersion .
| Enumeração 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 é usado. O @OldCustomerID parâmetro é usado para identificar a linha atual na fonte de dados. Como o valor da coluna correspondente é encontrado na Original versão da linha, o mesmo SourceColumn (CustomerID) com um SourceVersion de Original é usado.
Trabalhar com parâmetros do SqlClient
O exemplo a seguir demonstra como criar um SqlDataAdapter e definir o MissingSchemaAction para AddWithKey recuperar informações adicionais de esquema do banco de dados. O SelectCommandconjunto de propriedades , InsertCommand, UpdateCommande DeleteCommand e seus objetos correspondentes SqlParameter adicionados à Parameters coleção. 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;
}