none
Como saber se houve mudanças em uma determinada tabela. RRS feed

  • Discussão Geral

  • Olá pessoal,

    Gostaria de saber, se existe algum comando para verificar, se houve alguma mudança em uma determinada tabela, ou seja se algum registro foi inserido, alterado ou excluído, estou tentando usar um comando mas não está dando certo, estou fazendo essa rotina, mas está dando erro de compilação.

    DataSet dts = new DataSet()

    if ( dts.Tables["Contatos"].HasChanges() )

    {

        messagebox("houve mudança na tabela");

    }

    Windows Form, MySQL, C#

    domingo, 26 de novembro de 2017 12:55

Todas as Respostas

  • Olá!

    Você quer saber se houveram mudanças direto no banco de dados ou se os dados que você carregou em memória foram modificados? Se for a primeira opção, acredito que não seja possível ser feito no nível da aplicação.. Já se for a segunda opção, você está no caminho certo.. Qual é o erro de compilação que você recebeu?

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    segunda-feira, 27 de novembro de 2017 10:12
    Moderador
  • Olá Andre,

    Quero saber se os dados carregados em memória, foram modificados, na rotina abaixo, HasChanges aparece grifado com vermelho, achei que tivesse faltando incluir alguma lib clicando com direito sobre HasChanges e selecionando Resolver, mas não aparece essa opção.

    if ( dts.Tables["Contatos"].HasChanges() )

    Erro:

    System.Data.DataTable does not contain a definition for 'HasChanges' and no extension method 'HasChanges' accepting a first argument of type 'System.Data.DataTable' could be found (are you missing a using directive or an assembly reference ?)

    segunda-feira, 27 de novembro de 2017 16:28
  • Olá!

    O que acontece é que o método "HasChanges" pertence ao DataSet, e não à DataTable.. Para saber se existe alterações pendentes em uma determinada tabela, você precisa executar um GetChanges nela e verificar se o conteúdo retornado é diferente de nulo..

    Exemplo:

                    var alteracoes = dts.Tables["Contatos"].GetChanges();
                    var foiAlterado = alteracoes != null && alteracoes.Rows.Count > 0;
    


    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    sexta-feira, 1 de dezembro de 2017 08:26
    Moderador
  • Perfeito AndreAlvesLima,

    Só para complementar Porter, isso deve ser feito antes de aplicar um AcceptChanges, pois depois todas as modificações serão aplicadas e não mais retornarão com GetChanges.


    Antero Marques
    _____________________________________________________________________________
    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.



    sexta-feira, 1 de dezembro de 2017 11:35
  • Sem dúvida, Antero.. Uma vez chamado um AcceptChanges, aí as alterações pendentes são confirmadas em memória, o que torna impossível a utilização de um GetChanges depois desse ponto..

    Abraço!


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    terça-feira, 5 de dezembro de 2017 04:33
    Moderador