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.
Observação
A DataSet classe e as classes relacionadas são tecnologias herdadas do .NET Framework do início dos anos 2000 que permitem que os aplicativos trabalhem com dados na memória enquanto os aplicativos são desconectados do banco de dados. As tecnologias são especialmente úteis para aplicativos que permitem que os usuários modifiquem dados e persistam as alterações no banco de dados. Embora os conjuntos de dados sejam uma tecnologia comprovadamente bem-sucedida, a abordagem recomendada para novos aplicativos .NET é usar o Entity Framework Core. O Entity Framework fornece uma maneira mais natural de trabalhar com dados tabulares como modelos de objeto e tem uma interface de programação mais simples.
Validar dados é o processo de confirmar que os valores inseridos em objetos de dados estão em conformidade com as restrições dentro do esquema de um conjunto de dados. O processo de validação também confirma que esses valores estão seguindo as regras que foram estabelecidas para seu aplicativo. É uma boa prática validar dados antes de enviar atualizações para o banco de dados subjacente. Isso reduz erros, bem como o número potencial de viagens de ida e volta entre um aplicativo e o banco de dados.
Você pode confirmar se os dados que estão sendo gravados em um conjunto de dados são válidos criando verificações de validação no próprio conjunto de dados. O conjunto de dados pode verificar os dados independentemente de como a atualização está sendo executada , seja diretamente por controles em um formulário, dentro de um componente ou de alguma outra maneira. Como o conjunto de dados faz parte do seu aplicativo (ao contrário do back-end do banco de dados), é um local lógico para criar a validação específica do aplicativo.
O melhor lugar para adicionar validação ao seu aplicativo está no arquivo de classe parcial do conjunto de dados. No Visual Basic ou Visual C#, abra o Designer de Conjunto de Dados e clique duas vezes na coluna ou tabela para a qual você deseja criar a validação. Essa ação abre o arquivo de código, no qual você pode criar um ColumnChanging ou RowChanging manipulador de eventos.
Validar os dados
A validação em um conjunto de dados é realizada das seguintes maneiras:
Criando sua validação específica do aplicativo que pode verificar valores em uma coluna de dados individual durante as alterações. Para obter mais informações, consulte Como validar dados durante as alterações de coluna.
Criando sua validação específica do aplicativo que pode verificar dados em valores enquanto uma linha de dados inteira está sendo alterada. Para obter mais informações, consulte Como validar dados durante as alterações de linha.
Criando chaves, restrições exclusivas e assim por diante como parte da definição de esquema real do conjunto de dados.
Definindo as propriedades do DataColumn objeto, como MaxLength, AllowDBNulle Unique.
Vários eventos são gerados pelo DataTable objeto quando uma alteração está ocorrendo em um registro:
- Os eventos ColumnChanging e ColumnChanged são acionados durante e após cada alteração em uma coluna individual. O ColumnChanging evento é útil quando você deseja validar alterações em colunas específicas. Informações sobre a alteração proposta são passadas como um argumento com o evento.
- Os eventos RowChanging e RowChanged são gerados durante e após qualquer alteração em uma linha. O evento RowChanging é mais geral. Indica que uma alteração está ocorrendo em algum lugar da linha, mas você não sabe qual coluna foi alterada.
Por padrão, cada alteração em uma coluna gera, portanto, quatro eventos. Os primeiros são os eventos ColumnChanging e ColumnChanged para a coluna específica que está sendo alterada. A seguir estão os eventos RowChanging e RowChanged. Se várias alterações estiverem sendo feitas na linha, os eventos serão gerados para cada alteração.
Observação
O método da linha de dados BeginEdit desativa os eventos RowChanging e RowChanged após cada alteração de coluna individual. Nesse caso, o evento não é gerado até que o método EndEdit seja chamado, quando os eventos RowChanging e RowChanged são gerados apenas uma vez. Para obter mais informações, consulte Desativar restrições ao preencher um conjunto de dados.
O evento escolhido depende de quão granular você deseja que a validação seja. Se for importante que você capture um erro imediatamente quando uma coluna for alterada, crie a validação usando o evento ColumnChanging. Caso contrário, use o evento RowChanging, que pode resultar na captura de vários erros ao mesmo tempo. Além disso, se os dados estiverem estruturados para que o valor de uma coluna seja validado com base no conteúdo de outra coluna, execute a validação durante o RowChanging evento.
Quando os registros são atualizados, o DataTable objeto gera eventos aos quais você pode responder à medida que as alterações estão ocorrendo e depois que as alterações são feitas.
Se o aplicativo usar um conjunto de dados fortemente tipado, você poderá criar manipuladores de eventos fortemente tipados. Isso adiciona quatro eventos adicionais tipados para os quais você pode criar manipuladores: dataTableNameRowChanging, dataTableNameRowChanged, dataTableNameRowDeleting e dataTableNameRowDeleted. Esses manipuladores de eventos tipados passam um argumento que inclui os nomes de coluna da sua tabela que tornam mais fácil a escrita e a leitura do código.
Eventos de atualização de dados
| Acontecimento | Descrição |
|---|---|
| ColumnChanging | O valor em uma coluna está sendo alterado. O evento passa a linha e a coluna para você, juntamente com o novo valor proposto. |
| ColumnChanged | O valor em uma coluna foi alterado. O evento passa a linha e a coluna para você, juntamente com o valor proposto. |
| RowChanging | As alterações feitas em um DataRow objeto estão prestes a ser confirmadas novamente no conjunto de dados. Se você não tiver chamado o BeginEdit método, o RowChanging evento será gerado para cada alteração em uma coluna imediatamente após o ColumnChanging evento ter sido gerado. Se você tiver chamado BeginEdit antes de fazer alterações, o RowChanging evento será gerado somente quando você chamar o EndEdit método. O evento passa a linha para você, juntamente com um valor que indica que tipo de ação (alterar, inserir e assim por diante) está sendo executado. |
| RowChanged | Uma linha foi alterada. O evento passa a linha para você, juntamente com um valor que indica que tipo de ação (alterar, inserir e assim por diante) está sendo executado. |
| RowDeleting | Uma linha está sendo excluída. O evento passa a linha para você, juntamente com um valor que indica que tipo de ação (excluir) está sendo executado. |
| RowDeleted | Uma linha foi excluída. O evento passa a linha para você, juntamente com um valor que indica que tipo de ação (excluir) está sendo executado. |
Os eventos ColumnChanging, RowChanging e RowDeleting são gerados durante o processo de atualização. Você pode usar esses eventos para validar dados ou executar outros tipos de processamento. Como a atualização está em processo durante esses eventos, você pode cancelá-la lançando uma exceção, o que impede que a atualização seja concluída.
Os eventos ColumnChanged, RowChanged e RowDeleted são eventos de notificação gerados quando a atualização é concluída com êxito. Esses eventos são úteis quando você deseja executar mais ações com base em uma atualização bem-sucedida.
Validar dados durante alterações de coluna
Observação
O Designer de Conjunto de Dados cria uma classe parcial na qual a lógica de validação pode ser adicionada a um conjunto de dados. O conjunto de dados gerado pelo designer não exclui nem altera nenhum código na classe parcial.
Você pode validar dados quando o valor em uma coluna de dados for alterado respondendo ao ColumnChanging evento. Quando gerado, esse evento passa um argumento de evento (ProposedValue) que contém o valor que está sendo proposto para a coluna atual. Com base no conteúdo de e.ProposedValue, você pode:
Aceite o valor proposto sem fazer nada.
Rejeite o valor proposto definindo o erro de coluna (SetColumnError) de dentro do manipulador de eventos de alteração de coluna.
Opcionalmente, use um ErrorProvider controle para exibir uma mensagem de erro para o usuário. Para obter mais informações, confira Componente ErrorProvider.
A validação também pode ser executada durante o RowChanging evento.
Validar dados durante alterações de linha
Você pode escrever código para verificar se cada coluna que deseja validar contém dados que atendem aos requisitos do aplicativo. Faça isso definindo a coluna para indicar que ela contém um erro se um valor proposto for inaceitável. Os exemplos a seguir definem um erro de coluna quando a Quantity coluna é 0 ou menos. Os manipuladores de eventos de alteração de linha devem ser semelhantes aos exemplos abaixo.
Para validar dados quando uma linha é alterada (Visual Basic)
Abra seu conjunto de dados no Designer de Conjunto de Dados . Para obter mais informações, consulte Passo a passo: criando um conjunto de dados no Designer de Conjunto de Dados.
Clique duas vezes na barra de título da tabela que você deseja validar. Essa ação cria automaticamente o manipulador de eventos RowChanging do DataTable no arquivo de classe parcial do conjunto de dados.
Dica
Clique duas vezes à esquerda do nome da tabela para criar o manipulador de eventos de alteração de linha. Se você clicar duas vezes no nome da tabela, poderá editá-lo.
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
Para validar dados quando uma linha é alterada (C#)
Abra seu conjunto de dados no Designer de Conjunto de Dados . Para obter mais informações, consulte Passo a passo: criando um conjunto de dados no Designer de Conjunto de Dados.
Clique duas vezes na barra de título da tabela que você deseja validar. Essa ação cria um arquivo de classe parcial para o DataTable.
Observação
O Designer de Conjunto de Dados não cria automaticamente um manipulador de eventos para o RowChanging evento. Você precisa criar um método para manipular o evento e executar o código RowChanging para vincular o evento no método de inicialização da tabela.
Copie o seguinte código para a classe parcial:
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }
Para recuperar linhas alteradas
Cada linha em uma tabela de dados tem uma RowState propriedade que mantém o controle do estado atual dessa linha usando os valores na DataRowState enumeração. Você pode retornar linhas alteradas de um conjunto de dados ou tabela de dados chamando o GetChanges método de um DataSet ou DataTable. Você pode verificar se as alterações existem antes da chamada GetChanges chamando o HasChanges método de um conjunto de dados.
Observação
Depois de confirmar alterações em um conjunto de dados ou tabela de dados (chamando o AcceptChanges método), o GetChanges método não retorna dados. Se o aplicativo precisar processar linhas alteradas, você deverá processar as alterações antes de chamar o AcceptChanges método.
Chamar o GetChanges método de um conjunto de dados ou tabela de dados retorna um novo conjunto de dados ou uma tabela de dados que contém apenas registros que foram alterados. Se você quiser obter registros específicos , por exemplo, apenas novos registros ou apenas registros modificados , poderá passar um valor da DataRowState enumeração como um parâmetro para o GetChanges método.
Use a DataRowVersion enumeração para acessar as diferentes versões de uma linha (por exemplo, os valores originais que estavam em uma linha antes de processá-la).
Para obter todos os registros alterados de um conjunto de dados
Chame o método GetChanges de um conjunto de dados.
O exemplo a seguir cria um novo conjunto de dados chamado
changedRecordse o preenche com todos os registros alterados de outro conjunto de dados chamadodataSet1.
Para obter todos os registros alterados de uma tabela de dados
Chame o método GetChanges de uma Tabela de Dados.
O exemplo a seguir cria uma nova tabela de dados chamada
changedRecordsTablee a preenche com todos os registros alterados de outra tabela de dados chamadadataTable1.
Para obter todos os registros que têm um estado de linha específico
Chame o
GetChangesmétodo de um conjunto de dados ou uma tabela de dados e passe um DataRowState valor de enumeração como um argumento.O exemplo a seguir mostra como criar um novo conjunto de dados chamado
addedRecordse preenchê-lo somente com registros que foram adicionados aodataSet1conjunto de dados.O exemplo a seguir mostra como retornar todos os registros que foram adicionados recentemente à
Customerstabela:
Acessar a versão original de um DataRow
Quando são feitas alterações nas linhas de dados, o conjunto de dados retém as versões originais (Original) e novas (Current) da linha. Por exemplo, antes de chamar o AcceptChanges método, seu aplicativo pode acessar as diferentes versões de um registro (conforme definido na DataRowVersion enumeração) e processar as alterações adequadamente.
Observação
Diferentes versões de uma linha só existem depois de ela ter sido editada e antes dela o AcceptChanges método ter sido chamado. Depois que o AcceptChanges método for chamado, as versões atuais e originais serão as mesmas.
Passar o DataRowVersion valor junto com o índice de coluna (ou nome da coluna como uma cadeia de caracteres) retorna o valor da versão de linha específica dessa coluna. A coluna alterada é identificada durante os eventos ColumnChanging e ColumnChanged. Este é um bom momento para inspecionar as diferentes versões de linha para fins de validação. No entanto, se você suspendeu temporariamente as restrições, esses eventos não serão gerados e você precisará identificar programaticamente quais colunas foram alteradas. Você pode fazer isso iterando por meio da Columns coleção e comparando os valores diferentes DataRowVersion .
Para obter a versão original de um registro
Para acessar o valor de uma coluna, passe o DataRowVersion da linha que você deseja retornar.
O exemplo a seguir mostra como usar um DataRowVersion valor para obter o valor original de um
CompanyNamecampo em um DataRow:
Acessar a versão atual de um DataRow
Para obter a versão atual de um registro
Acesse o valor de uma coluna e adicione um parâmetro ao índice que indica qual versão de uma linha você deseja retornar.
O exemplo a seguir mostra como usar um DataRowVersion valor para obter o valor atual de um
CompanyNamecampo em um DataRow: