3. O estudo de caso
Pretendemos escrever uma aplicação .NET que permita a um utilizador realizar simulações de cálculo da remuneração das amas da associação «Maison de la petite enfance» de um município. Iremos centrar-nos tanto na organização do código DotNet da aplicação como no próprio código.
3.1. A base de dados « »
Os dados estáticos necessários para elaborar a folha de pagamento estão armazenados numa base de dados SQL Server Express denominada dbpam (pam = Paie Assistante Maternelle). Esta base de dados tem um administrador chamado «sa», cuja palavra-passe é «msde».
![]() |
A base de dados tem três tabelas, EMPLOYES, COTISATIONS e INDEMNITES, cuja estrutura é a seguinte:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
Estrutura:
![]() |
|
O seu conteúdo poderia ser o seguinte:
![]()
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
Estrutura:
![]() |
O seu conteúdo poderia ser o seguinte:
As taxas das contribuições sociais são independentes do trabalhador. A tabela anterior tem apenas uma linha.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
O seu conteúdo poderia ser o seguinte:

Note-se que os subsídios podem variar de uma ama a outra. Estão, de facto, associados a uma ama específica através do seu índice salarial. Assim, a Sra. Marie Jouveinal, que tem um índice salarial de 2 (tabela EMPLOYES), tem um salário por hora de 2,1 euros (tabela INDEMNITES).
As relações entre as três tabelas são as seguintes:
![]() |
Existe uma relação de chave estrangeira entre a coluna EMPLOYES (INDICE) e a coluna INDEMNITES (INDICE).
A base de dados [dbpam] assim criada gera dois ficheiros na pasta do SQL Server Express:
![]() |
Os ficheiros [dbpam.mdf, dbpam_log.ldf] podem ser transferidos para outro computador e voltados a associar ao SGBD SQL Server Express desse computador. Eis como proceder:
- os ficheiros BD e [dbpam] são duplicados para uma pasta
![]() |
- inicia-se o SQL Server Express
- com o cliente SQL Server Management Studio Express, associe o ficheiro [dbpam.mdf] ao SGBD:
![]() |
![]() |
- clique com o botão direito do rato em [Databases] / Anexar
- selecionar o ficheiro [dbpam.mdf] através de um botão [Add] não representado
- o ficheiro anexado dará origem a um BD que não deve já existir. Aqui, no campo [Attach As], atribuiu-se o nome [dbpam2] ao novo BD.
- Vê-se o novo BD e as suas tabelas
Esta técnica de anexar um BD é útil para transferir um BD de um posto para outro e iremos utilizá-la ocasionalmente aqui.
3.2. Método de cálculo do salário de uma ama
Apresentamos agora o método de cálculo do salário mensal de uma ama. Tomamos como exemplo o salário da Sra. Marie Jouveinal, que trabalhou 150 horas ao longo de 20 dias durante o mês a pagar.
São tidos em conta os seguintes elementos: | | |
O salário base da ama é calculado através da seguinte fórmula: | ||
Deste salário base devem ser deduzidas várias contribuições sociais: | | |
Total das contribuições sociais: | ||
Além disso, a ama tem direito, por cada dia trabalhado, a um subsídio de subsistência e a um subsídio de refeição. A este título, recebe os seguintes subsídios: | | |
Em suma, o salário líquido a pagar à ama é o seguinte: |
3.3. Lembretes ADO.NET
A aplicação de cálculo de salários necessita das informações da base de dados [dbpam]. A sua arquitetura será a seguinte:
![]() |
- em [1], o utilizador efetua um pedido
- em [2], a aplicação de folha de pagamento processa-a.
- esta pode então necessitar dos dados da base de dados. Em seguida, envia um pedido ao fornecedor (provider) ADO.NET do SGBD utilizado pelo [4].
- Este consulta a base de dados [5] e devolve os resultados ao fornecedor ADO.NET, que, por sua vez, os transmite à aplicação
- esta aplicaçãoprocura esses resultados e elabora uma resposta [5] para o utilizador
Recordamos agora as principais interfaces apresentadas por um fornecedor ADO.NET aos seus clientes [3].
No modo ligado, a aplicação:
- abre uma ligação com a fonte de dados
- trabalha com a fonte de dados em modo de leitura/gravação
- encerra a ligação
Três interfaces ADO.NET estão principalmente envolvidas nestas operações:
- IDbConnection, que encapsula as propriedades e métodos da ligação.
- IDbCommand, que encapsula as propriedades e métodos do comando SQL executado.
- IDataReader, que encapsula as propriedades e métodos do resultado de um comando SQL Select.
A interface IDbConnection
Serve para gerir a ligação à base de dados. Entre os métodos M e propriedades P desta interface encontram-se os seguintes:
Nome | Tipo | Função |
P | cadeia de ligação à base de dados. Especifica todos os parâmetros necessários para estabelecer a ligação a uma base de dados específica. | |
M | abre a ligação à base de dados definida por ConnectionString | |
M | encerra a ligação | |
M | inicia uma transação. | |
P | estado da ligação: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
Se Connection for uma classe que implementa a interface IDbConnection, a abertura da ligação pode ser efetuada da seguinte forma:
A interface IDbCommand
Serve para executar um comando SQL ou um procedimento armazenado. Entre os métodos M e propriedades P desta interface encontram-se os seguintes:
Nome | Tipo | Função |
P | indica o que deve ser executado - obtém os seus valores de uma enumeração: - CommandType.Text: executa a ordem SQL definida na propriedade CommandText. Este é o valor por predefinição. - CommandType.StoredProcedure: executa um procedimento armazenado na base de dados | |
P | - o texto da ordem SQL a executar se CommandType = CommandType.Text - o nome da procedimento armazenado a executar se CommandType = CommandType.StoredProcedure | |
P | a ligação IDbConnection a utilizar para executar a ordem SQL | |
P | a transação IDbTransaction na qual executar a ordem SQL | |
P | a lista de parâmetros de uma ordem SQL configurada. A ordem «update articles set price=price*1.1 where id=@id» tem o parâmetro @id. | |
M | para executar uma ordem SQL Select. Obtém-se um objeto IDataReader que representa o resultado do Select. | |
M | para executar uma ordem SQL (Atualizar, Inserir, Eliminar). Obtém-se o número de linhas afetadas pela operação (atualizadas, inseridas, eliminadas). | |
M | para executar uma ordem SQL Select que devolva apenas um único resultado, tal como em: select count(*) from articles. | |
M | para criar os parâmetros IDbParameter de uma ordem SQL configurada. | |
M | permite otimizar a execução de uma consulta parametrizada quando esta é executada várias vezes com parâmetros diferentes. |
Se Command for uma classe que implementa a interface IDbCommand, a execução de uma ordem SQL sem transação terá a seguinte forma:
A interface IDataReader
Serve para encapsular os resultados de uma ordem SQL Select. Um objeto IDataReader representa uma tabela com linhas e colunas, que é processada sequencialmente: primeiro a primeira linha, depois a segunda, ... Entre os métodos M e propriedades P desta interface encontram-se os seguintes:
Nome | Tipo | Função |
P | o número de colunas da tabela IDataReader | |
M | GetName(i) devolve o nome da coluna n.º i da tabela IDataReader. | |
P | Item[i] representa a coluna n.º i da linha atual da tabela IDataReader. | |
M | avança para a linha seguinte da tabela IDataReader. Devolve o valor booleano True se a leitura tiver sido bem-sucedida; caso contrário, devolve False. | |
M | fecha a tabela IDataReader. | |
M | GetBoolean(i): devolve o valor booleano da coluna n.º i da linha atual da tabela IDataReader. Os outros métodos análogos são os seguintes: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): devolve o valor da coluna n.º i da linha atual da tabela IDataReader como tipo object. | |
M | IsDBNull(i) retorna True se a coluna n.º i da linha atual da tabela IDataReader não tiver valor, o que é simbolizado pelo valor SQL NULL. |
A análise de um objeto IDataReader assemelha-se frequentemente ao seguinte:









