Jump to content

Detectar alterações a uma tabela numa Base de Dados


Zamits

Recommended Posts

Boas pessoal.

Eu estou a desenvolver uma aplicação em C# que comunica com um BD utilizando o SQL Server 2000.

O que eu pretendia saber é se existe alguma maneira de, a partir da minha aplicação em C#, que corre em ciclo infinito, saber se existiram alterações a uma tabela na base de dados.

Ou seja, eu pretendo que ao ser realizado algum insert ou update a um dos registos dessa tabela a minha apicação C# tenha conhecimento e detecte essa mesma alteração.

Qual a melhor forma de conseguir isto? É possível consegui-lo apenas a partir do programa em C#, ou tenho que criar algum procedimento em SQL que depois avisa a minha aplicação de que existiram mudanças?

Eu pensei nos triggers e já um utilizador mos indicou, mas quanto aos triggers tenho duas dúvidas:

- Primeiro, se criar um trigger externo à aplicação escrita em C#, como é que aviso essa mesma aplicação quando o trigger é disparado?

- Segundo, é possível criar triggers embebidos em código C#, para o SQL Server 2000? É que todos os exemplos que vejo na net, mostram realmente triggers em C#, mas utilizando o template do Visual Studio "SQLServerProject" e que apenas funciona com a versão 2005 do SQL Server, enquanto que eu estou a desenvolver utilizando a 2000.

Se alguém me pudesse ajudar agradecia.

Desde já obrigado, Zamits!

Link to comment
Share on other sites

Não me lembro de nenhuma forma de implementar um sistema de messaging em SQL Server 2000, sugiro uma sistema de pooling, ou seja, guardar os dados em outra tabela quando é disparado um trigger, tipo Audit_X.

Na aplicação em C# efectuar um sistema de pooling na tabela. Sugiro também algum campo na tabela Audit_X que indique que já foi efectuado pooling para a aplicação de forma a não estar sempre a retornar os mesmos dados. Ou então apagar da tabela sempre que se efectuar a leitura.

Se alguem sabe de uma forma de implementar tipo messaging gostaria de ouvir também.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Link to comment
Share on other sites

boax...

Por .net Remoting...

aplicacoes cliente/servidor.

Todas os acessos a bd sao feitos pelo servidor, e sempre que a bd é alterada, o servidor retem essa informacao.

no entanto, para o cliente saber dessas alteracoes, tera de contactar o servidor de tempos a tempos... mas como tu dissestes que a tua aplicacao estava em ciclo infinito ......

Ja me faz lembrar o COBOL  🙂

Link to comment
Share on other sites

Há várias formas de o fazer, preferencialmente recorrendo a triggers (unicamente na BD).

Quando ocorre uma alteração, regista-se a mesma numa tabela de controlo que é consultada periodicamente.

Outra solução é, marcar cada registo com o timestamp da última actualização.

Sabendo a aplicação qual foi a última mudança que ocorreu, basta essa mudança contra o timestamp da última actualização na bd.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Parece-me a melhor solução M6.

Os triggers na BD não resolvem o problema.

A minha preferência pessoal vai para o camnpo de timestamp de ultima alteração na tabela, porque vai permitir a evolução para versionamento e outras solução de certa elegãncia.

Claro que se forem muitas tabelas, o hack da tabela de controlo pode resolver.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.