DataAdapter.Update(DataSet) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
public:
virtual int Update(System::Data::DataSet ^ dataSet);
public:
abstract int Update(System::Data::DataSet ^ dataSet);
public virtual int Update (System.Data.DataSet dataSet);
public abstract int Update (System.Data.DataSet dataSet);
abstract member Update : System.Data.DataSet -> int
override this.Update : System.Data.DataSet -> int
abstract member Update : System.Data.DataSet -> int
Public Overridable Function Update (dataSet As DataSet) As Integer
Public MustOverride Function Update (dataSet As DataSet) As Integer
Parâmetros
Retornos
O número de linhas atualizadas com êxito a partir do DataSet.
Implementações
Exceções
A tabela de origem é inválida.
Uma tentativa de executar uma instrução INSERT, UPDATE ou DELETE resultou em zero registro afetado.
Exemplos
O exemplo a seguir usa a classe derivada, OleDbDataAdapter, para Update a fonte de dados.
static private DataSet CreateCommandAndUpdate(
string connectionString,
string queryString)
{
DataSet dataSet = new DataSet();
using (OleDbConnection connection =
new OleDbConnection(connectionString))
{
connection.Open();
OleDbDataAdapter adapter =
new OleDbDataAdapter();
adapter.SelectCommand =
new OleDbCommand(queryString, connection);
OleDbCommandBuilder builder =
new OleDbCommandBuilder(adapter);
adapter.Fill(dataSet);
// Code to modify data in the DataSet here.
// Without the OleDbCommandBuilder, this line would fail.
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.Update(dataSet);
}
return dataSet;
}
Public Function CreateCommandAndUpdate( _
ByVal connectionString As String, _
ByVal queryString As String) As DataSet
Dim dataSet As New DataSet()
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim adapter As New OleDbDataAdapter()
adapter.SelectCommand = New OleDbCommand( _
queryString, connection)
Dim builder As OleDbCommandBuilder = _
New OleDbCommandBuilder(adapter)
adapter.Fill(dataSet)
' Code to modify the data in the DataSet here.
' Without the OleDbCommandBuilder this line would fail.
builder.GetUpdateCommand()
adapter.Update(dataSet)
End Using
Return dataSet
End Function
Comentários
A atualização é executada por linha. Para cada linha inserida, modificada e excluída, o Update método determina o tipo de alteração que foi executada nela (Inserir, Atualizar ou Excluir). Dependendo do tipo de alteração, o Insert
Update,
modelo de comando ou Delete
é executado para propagar a linha modificada para a fonte de dados. Quando um aplicativo chama o Update método , o DataAdapter examina a RowState propriedade e executa as instruções INSERT, UPDATE ou DELETE necessárias iterativamente para cada linha, com base na ordem dos índices configurados no DataSet. Por exemplo, Update pode executar uma instrução DELETE, seguida por uma instrução INSERT e outra instrução DELETE, devido à ordenação das linhas no DataTable.
Deve-se observar que essas instruções não são executadas como um processo em lote; cada linha é atualizada individualmente. Um aplicativo pode chamar o GetChanges método em situações em que você deve controlar a sequência de tipos de instrução (por exemplo, INSERT antes de UPDATE). Para obter mais informações, consulte Atualizando fontes de dados com DataAdapters.
Se as instruções INSERT, UPDATE ou DELETE não tiverem sido especificadas, o Update método gerará uma exceção. No entanto, é possível criar um objeto SqlCommandBuilder ou OleDbCommandBuilder para gerar automaticamente instruções SQL para atualizações de tabela única caso você defina a propriedade SelectCommand
de um provedor de dados do .NET Framework. Em seguida, quaisquer instruções SQL adicionais que você não definir são geradas pelo CommandBuilder. Esta lógica de geração requer que as informações da coluna principal estejam presente no DataSet. Para obter mais informações, consulte Gerando comandos com CommandBuilders.
O Update método recupera linhas da tabela listada no primeiro mapeamento antes de executar uma atualização. Em Update seguida, atualiza a linha usando o valor da UpdatedRowSource propriedade . Todas as linhas adicionais retornadas são ignoradas.
Depois que todos os dados são recarregados no DataSet, o evento OnRowUpdated é acionado, permitindo que o usuário inspecione a linha DataSet reconciliada e todos os parâmetros de saída retornados pelo comando. Depois que uma linha é atualizada com êxito, as alterações feitas nessa linha são aceitas.
Ao usar Update, a ordem de execução é a seguinte:
Os valores no DataRow são movidos para os valores de parâmetro.
O evento OnRowUpdating será gerado.
O comando é executado.
Se o comando estiver definido como
FirstReturnedRecord
, o primeiro resultado retornado será colocado no DataRow.Se houver parâmetros de saída, eles serão colocados no DataRow.
O evento OnRowUpdated será gerado.
DataRow.AcceptChanges é chamado. Isso gerará os DataTable.RowChanging eventos e DataTable.RowChanged para o atualizado DataRow.
Cada comando associado ao DataAdapter geralmente tem uma coleção de parâmetros associada a ele. Os parâmetros são mapeados para a linha atual por meio das SourceColumn
propriedades e SourceVersion
da classe de um provedor de dados . Parameter
NET. SourceColumn
refere-se a uma DataTable coluna que faz DataAdapter referência a para obter valores de parâmetro para a linha atual.
SourceColumn
refere-se ao nome da coluna não mapeado antes da aplicação de qualquer mapeamento de tabela. Caso SourceColumn
refira-se a uma coluna inexistente, a ação tomada depende de um dos valores MissingMappingAction a seguir.
Valor de enumeração | Ação executada |
---|---|
MissingMappingAction.Passthrough |
Use os nomes de coluna de fonte e os nomes de tabela no DataSet caso nenhum mapeamento esteja presente. |
MissingMappingAction.Ignore |
Um SystemException é gerado. Quando os mapeamentos são definidos explicitamente, um mapeamento ausente para um parâmetro de entrada geralmente é o resultado de um erro. |
MissingMappingAction.Error |
Um SystemException é gerado. |
A propriedade SourceColumn
também é usada para remapear o valor para parâmetros de saída ou de entrada/saída para o DataSet
. Uma exceção será gerada se fizer referência a uma coluna inexistente.
A SourceVersion
propriedade da classe de um provedor de dados . Parameter
NET determina se deve usar a versão Original, Atual ou Proposta do valor da coluna. Essa funcionalidade geralmente é usada para incluir valores originais na cláusula WHERE de uma instrução UPDATE para marcar para violações de simultaneidade otimistas.
Chamar o AcceptChanges método ou AcceptChanges método confirmará todas as alterações no DataSet ou DataTable. Se qualquer um desses métodos for chamado antes do Update método ser chamado, nenhuma alteração será confirmada quando o Update método for chamado, a menos que outras alterações tenham sido feitas desde AcceptChanges ou AcceptChanges foi chamado.
Observação
Caso ocorra um erro durante a atualização de uma linha, uma exceção é lançada e a execução da atualização é descontinuada. Para continuar a operação de atualização sem gerar exceções quando um erro é encontrado, defina a propriedade ContinueUpdateOnError como true
antes de chamar Update. Você também pode responder a erros linha por linha dentro do evento RowUpdated
de um DataAdapter. Para continuar a operação de atualização sem gerar uma exceção dentro evento RowUpdated
, defina a propriedade Status do RowUpdatedEventArgs como Continue.
Para cada coluna propagada para a fonte de dados em Update, um parâmetro deve ser adicionado ao InsertCommand
, UpdateCommand
ou DeleteCommand
. A SourceColumn
propriedade do parâmetro deve ser definida como o nome da coluna. Essa configuração indica que o valor do parâmetro não é definido manualmente, mas é obtido da coluna específica na linha processada no momento.