![]() |
António Roberto Software |
|
Linguagens de Programação
2
|
3º ano da
Licenciatura em Informática de Gestão
|
Aula de 21 de Janeiro de 2004
WinBDAlunos em ambiente multiutilizador

Experiências com o funcionamento do programa WinBDAlunos em ambiente multiutilizador:
- colocação da base de dados alunos.mdb numa máquina numa directoria partilhada com permissões de leitura e de escrita.
- abertura do projecto WinBDAlunos em várias máquinas
- alteração da ConnectionString de forma a todos os projectos abertos apontarem para a base de dados Alunos.mdb na máquina com a directoria partilhada
- experiências de execução em simultâneo por vários utilizadores do programa WinBDAlunos sobre a mesma base de dados
Quando vários utilizadores tentam modificar os mesmos dados ao mesmo tempo, é necessário controlar esse acesso simultâneo, de forma que o processamento de cada indivíduo alcançe o resultado desejado. Genéricamente, existem três tipos de abordagens no controle da concorrência:
|
Last in Wins |
Descrição |
|
|
|
É deste modo que funciona o programa desenvolvido nas últimas aulas É permitido ao utilizador
A actualizar o registo p, embora o registo na base de dados já não
corresponda ao registo original lido por A Neste forma de gestão da concorrência a última actualização prevalece sobre as outras, daí o nome "last in wins". |
|
|
Optimistic |
Descrição |
|
|
|
É deste modo que funciona a versão do programa demonstrada nesta aula Não é permitido ao utilizador
A actualizar o registo p, porque o registo na base de dados já não
corresponde ao registo original lido por A Esta forma de gestão da concorrência denomina-se optimista porque parte do princípio que em regra um registo não é alterado no espaço de tempo entre a sua leitura e a sua actualização.
|
|
|
Pessimistic |
Descrição |
|
![]() |
Esta forma de gestão de concorrência só é possível no ADO.NET em modo conectado e através da utilização de transacções com um nível de isolamento adequado. No intervalo de tempo entre a leitura e a actualização do registo p por parte do utilizador A, o registo fica com o acesso bloqueado a outros utilizadores. Este sistema pode ser inconveniente para os outros utilizadores se o utilizador A demorar a actualizar o registo p. |
|
Na base de dados foi adicionada a Stored Procedure spActualizarAlunoOptimista

O critério para encontrar o registo a actualizar inclui, além da chave primária, os valores dos campos obtidos na leitura efectuada no início do processo de actualização.
Na classe AcessoBD
foi acrescentado o método ActualizarOptimista:
cmdActualizar =
cmdActualizar.CommandType =
CommandType.StoredProcedure;
...
int
NrRegistosAfectados;
NrRegistosAfectados =
cmdActualizar.ExecuteNonQuery();
if
( NrRegistosAfectados == 0 )
throw
new
DBConcurrencyException("Registo alterado por outro utilizador durante o
processo de actualização!");
}
...
|
Nome da Solução |
Tipo |
Código Fonte |
|
WinBDAlunos |
Windows Application |