Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Fórum iMasters,
Fui encarregado de desenvolver um sistema em .NET para uma certa empresa. Ele funciona basicamente da seguinte forma:
Parece simples, mas quando eu fui pensar em como fazer isso (estou em fase de sondagens, pré planejamento) realmente eu vi que tinha um problema. Não consigo pensar em uma forma eficiente de fazer isso.
A primeira idéia foi enviar toda a database local (através de um dataset), mas isso mostrou-se impraticável, já que o volume de dados deve crescer ao longo do tempo.
A segunda opção foi pensar em criar uma parte da aplicação que analisasse as alterações e enviasse um SqlCommand que alteraria a database global. Assim, haveria duas bases de dados: a que contivesse os dados na última atualização e outra que pudesse ser alterada. No momento do envio das informações, o sistema compara as suas e verifica as alterações, criando o SqlCommand. Mas aí eu esbarro em dois problemas: o processo pode consumir recursos demais da máquina, uma vez que a base de dados local é baseada em arquivos XML e, nesse processamento, trabalha-se com duas; a segurança também fica comprometida, uma vez que o webservice não pode controlar quem manipula os registros (se um usuário1 for mal intencionado, pode acabar alterando dados de um usuario2, inserido um registro, por exemplo).
===============
Abaixo vão alguns exemplos de tabelas que dão uma idéia melhor do que eu penso em fazer.
-------------------------------
| DADO1 | DADO2 | DADO3 |
-------------------------------
|Valor1 |Valor2 |Valor3 |
-------------------------------
Tabela da database do Usuario1.
-------------------------------
| DADO1 | DADO2 | DADO3 |
-------------------------------
|Valor4 |Valor5 |Valor6 |
|Valor7 |Valor8 |Valor9 |
-------------------------------
Tabela da database do Usuário2.
-------------------------------------------
| DADO1 | DADO2 | DADO3 | USUARIO |
-------------------------------------------
|Valor1 |Valor2 |Valor3 |Usuario1 |
|Valor4 |Valor5 |Valor6 |Usuario2 |
|Valor7 |Valor8 |Valor9 |Usuario2 |
-------------------------------------------
Tabela da database do servidor.
===============
COMO EU ESTOU PENSANDO EM FAZER
Vamos supor que a tabela do Usuário2 fosse a da última atualização do sistema. Aí ele resolve alterar alguns dados: exclui a linha2 e inclui outro registro. A base ficaria assim:
-------------------------------
| DADO1 | DADO2 | DADO3 |
-------------------------------
|Valor4 |Valor5 |Valor6 |
|Valor7 |Valor8 |Valor9 |
-------------------------------
Tabela da database do Usuário2, reserva.
-------------------------------
| DADO1 | DADO2 | DADO3 |
-------------------------------
|Valor4 |Valor5 |Valor6 |
|Valor10 |Valor11 |Valor12 |
-------------------------------
Tabela da database do Usuário2, alterada.
No momento do envio das informações, o sistema compararia as duas bases e verificaria as alterações realizadas. Criaria então um SqlCommand, com as seguintes instruções SQL:
DELETE * FROM Tabela WHERE DADO1 = 'Valor4' AND DADO2 = 'Valor5' AND DADO3 = 'Valor6'
INSERT INTO Tabela (DADO1, DADO2, DADO3, USUARIO) VALUES ('Valor10', 'Valor11', 'Valor12', 'Usuário2')
Após a confirmação da atualização da base de dados global, a base de dados local de reserva do Usuario2 seria substituida pela alterada e uma cópia dessa base seria colocada no lugar da alterada para futuras alterações e o processo poderia se repetir indefinidamente.
===============
Gostaria então que vocês avaliassem esse método e sugerissem formas, dentro do universo .NET, de como resolver os problemas expostos.
Obrigado pela atenção (realmente o post ficou grande),
Lailson Bandeira
Carregando comentários...