Zamits Posted November 14, 2007 at 05:29 PM Report Share #147360 Posted November 14, 2007 at 05:29 PM 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 More sharing options...
shumy Posted November 14, 2007 at 05:52 PM Report Share #147374 Posted November 14, 2007 at 05:52 PM 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 More sharing options...
pedrotuga Posted November 14, 2007 at 06:05 PM Report Share #147377 Posted November 14, 2007 at 06:05 PM Triggers embebidos numa aplicação... nunca ouvi falar em tal coisa. Eu tambem criaria uma tabela auxiliar, não estou a ver é nenhuma forma de siinalização para alem de estar sempre a consultar essa tal tabela. Link to comment Share on other sites More sharing options...
RVG Posted November 14, 2007 at 06:14 PM Report Share #147380 Posted November 14, 2007 at 06:14 PM 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 More sharing options...
pedrotuga Posted November 14, 2007 at 06:21 PM Report Share #147382 Posted November 14, 2007 at 06:21 PM Qualquer aplicação de desktop está em ciclo infinito de forma a poder receber os sinais do utilizador. A chave do problema aqui é mesmo enviar um sinal da base de dados que possa ser apanhado pelo loop principal da aplicação. Link to comment Share on other sites More sharing options...
RVG Posted November 14, 2007 at 06:35 PM Report Share #147385 Posted November 14, 2007 at 06:35 PM boax... Sim ... mas existe uma diferenca entre uma aplicacao que esta a espera de algo... e outra que tenha um timer, por exemplo, que ela mesma provoca a accao... Mais uma discussao filosofica com o pedrotuga 🙂 o .net remoting nao serve? Link to comment Share on other sites More sharing options...
M6 Posted November 15, 2007 at 11:29 PM Report Share #147689 Posted November 15, 2007 at 11:29 PM 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 More sharing options...
Sérgio Costa Posted November 16, 2007 at 01:19 PM Report Share #147774 Posted November 16, 2007 at 01:19 PM 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 More sharing options...
shumy Posted November 16, 2007 at 01:26 PM Report Share #147777 Posted November 16, 2007 at 01:26 PM Não deixa de ter que consultar periodicamente os valores, além disso terá de guardar os anteriores de forma a efectuar um comparativo. 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 More sharing options...
Sérgio Costa Posted November 16, 2007 at 01:35 PM Report Share #147780 Posted November 16, 2007 at 01:35 PM DateTime.Now é bom. E não me parece que haja falta de ciclos, afinal.. é um ciclo infinito ? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now