Duplicação de inserção de dados no page refresh
Uma vez que me voltaram hoje a colocar a mesma questão, "tenho um problema, inserção dupla na bd ao fazer page refresh..." resolvi falar um pouco sobre este assunto.
Isto é um problema que acontece para quem está a programar "tudo à mão" no asp a inserção e remoção de dados através por exemplo de uma grid, assim que há um page refresh o comando é repetido. Ou seja ficamos com dados duplicados, ou registos apagados indevidamente.
A inovação da versão 2.0 (asp) veio facilitar este (entre outros) problema, uma vez que o controlo Grid associasse ao SqlDataSource, e juntamente aos comandos sql que lhe configuramos. Portanto se no nosso sqldatasource, definirmos, comandos de selecção, actualização e remoção de dados, assim que associarmos a Grid ao controlo automaticamente ficamos com os comandos para executar estas tarefas, de uma forma segura e sem problemas de page refresh.
Inclusivé ficam disponíveis para a Grid poder ter esses comandos (Delete, Select, Sort).
Mas para quem necessita de programar estes comandos à mão existem algumas soluções, como:
- Clearing the header
- Detecting Browser’s refresh
- Trapping at database level
Existe um bom artigo que descreve cada uma destas soluções, apresenta alternativas, tempos, comparações e com exemplos completos.
http://aspalliance.com/687
A minha recomendação vai para o SqlException, é das mais rápidas e o controlo está sobre a Base de dados, sendo na minha opinião a mais segura.