3. O estudo de caso
Desejamos desenvolver um aplicativo .NET que permita a um usuário realizar simulações de cálculo da remuneração das babás da associação “Maison de la petite enfance” de um município. Nos interessaremos tanto pela organização do código DotNet da aplicação quanto pelo código em si.
3.1. A base de dados “ ”
Os dados estáticos necessários para elaborar a folha de pagamento estão armazenados em um banco de dados SQL Server Express denominado dbpam (pam = Pagamento de Cuidadoras Infantis). Esse banco de dados possui um administrador chamado sa, com a senha msde.
![]() |
O banco de dados possui três tabelas: EMPLOYES, COTISATIONS e INDEMNITES, cuja estrutura é a seguinte:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
Estrutura:
![]() |
|
Seu conteúdo poderia ser o seguinte:
![]()
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
Estrutura:
![]() |
Seu conteúdo poderia ser o seguinte:
As alíquotas das contribuições sociais são independentes do empregado. A tabela anterior possui apenas uma linha.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
Seu conteúdo poderia ser o seguinte:

Observe-se que os subsídios podem variar de uma babá para outra. Na verdade, eles estão associados a uma babá específica por meio do índice salarial dela. Assim, a Sra. Marie Jouveinal, que possui 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).
O banco de dados [dbpam] assim criado gera dois arquivos na pasta do SQL Server Express:
![]() |
Os arquivos [dbpam.mdf, dbpam_log.ldf] podem ser transferidos para outro computador e reconectados ao SGBD SQL Server Express desse computador. Veja como proceder:
- os arquivos BD e [dbpam] são duplicados em uma pasta
![]() |
- inicie o SQL Server Express
- com o cliente SQL Server Management Studio Express, vincule o arquivo [dbpam.mdf] ao SGBD:
![]() |
![]() |
- clique com o botão direito do mouse em [Databases] / Anexar
- selecione o arquivo [dbpam.mdf] por meio de um botão [Add] não representado
- o arquivo anexado dará origem a um BD, que não deve existir ainda. Aqui, no campo [Attach As], atribuímos o nome [dbpam2] ao novo BD.
- Vemos o novo BD e suas tabelas
Essa técnica de vinculação de um BD é útil para transferir um BD de um cargo para outro, e vamos utilizá-la ocasionalmente aqui.
3.2. Modo de cálculo do salário de uma babá
Apresentamos agora a forma de cálculo do salário mensal de uma babá. Tomamos como exemplo o salário da Sra. Marie Jouveinal, que trabalhou 150 horas em 20 dias durante o mês a ser pago.
Os seguintes elementos são levados em consideração: | | |
O salário-base da babá é calculado pela seguinte fórmula: | ||
É necessário deduzir uma série de contribuições sociais desse salário-base: | | |
Total das contribuições sociais: | ||
Além disso, a babá tem direito, por cada dia trabalhado, a um auxílio de subsistência e a um auxílio-alimentação. A esse título, ela recebe os seguintes auxílios: | | |
No final, o salário líquido a ser pago à babá é o seguinte: |
3.3. Lembretes ADO.NET
O aplicativo de cálculo de folha de pagamento necessita das informações do banco de dados [dbpam]. Sua arquitetura será a seguinte:
![]() |
- em [1], o usuário faz uma solicitação
- em [2], o aplicativo de folha de pagamento processa a solicitação.
- ela pode então precisar dos dados do banco de dados. Em seguida, ela faz uma consulta ao provedor (provider) ADO.NET do SGBD utilizado pelo [4].
- Este consulta o banco de dados [5] e retorna os resultados ao provedor ADO.NET, que, por sua vez, os encaminha de volta ao aplicativo
- esta aplica o resultados e elabora uma resposta [5] para o usuário
Apresentamos agora as principais interfaces oferecidas por um provedor ADO.NET aos seus clientes [3].
No modo conectado, o aplicativo:
- abre uma conexão com a fonte de dados
- trabalha com a fonte de dados em modo de leitura/gravação
- encerra a conexão
Três interfaces ADO.NET são as principais envolvidas nessas operações:
- IDbConnection, que encapsula as propriedades e métodos da conexã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 gerenciar a conexão com o banco de dados. Entre os métodos M e propriedades P dessa interface, encontram-se os seguintes:
Nome | Tipo | Função |
P | cadeia de conexão com o banco de dados. Ela especifica todos os parâmetros necessários para estabelecer a conexão com um banco de dados específico. | |
M | abre a conexão com o banco de dados definido por ConnectionString | |
M | encerra a conexão | |
M | inicia uma transação. | |
P | estado da conexão: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
Se Connection for uma classe que implementa a interface IDbConnection, a conexão pode ser estabelecida da seguinte forma:
A interface IDbCommand
Serve para executar uma ordem SQL ou um procedimento armazenado. Entre os métodos M e propriedades P dessa interface, encontram-se os seguintes:
Nome | Tipo | Função |
P | indica o que deve ser executado — obtém seus valores de uma enumeração: - CommandType.Text: executa a ordem SQL definida na propriedade CommandText. Esse é o valor padrão. - CommandType.StoredProcedure: executa um procedimento armazenado no banco de dados | |
P | - o texto da ordem SQL a ser executada se CommandType = CommandType.Text - o nome da procedimento armazenado a ser executado se CommandType = CommandType.StoredProcedure | |
P | a conexão IDbConnection a ser utilizada 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 possui o parâmetro @id. | |
M | para executar uma ordem SQL Select. Obtém-se um objeto IDataReader que representa o resultado da ordem Select. | |
M | para executar uma ordem SQL (Atualizar, Inserir, Excluir). Obtém-se o número de linhas afetadas pela operação (atualizadas, inseridas, excluídas). | |
M | para executar uma instrução SQL Select que retorne apenas um único resultado, 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 ela é 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 são processadas sequencialmente: primeiro a primeira linha, depois a segunda, ... Entre os métodos M e propriedades P dessa interface, encontram-se os seguintes:
Nome | Tipo | Função |
P | o número de colunas da tabela IDataReader | |
M | GetName(i) retorna 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 próxima linha da tabela IDataReader. Retorna o valor booleano True se a leitura foi bem-sucedida; caso contrário, retorna False. | |
M | fecha a tabela IDataReader. | |
M | GetBoolean(i): retorna 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): retorna 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 costuma ser semelhante ao seguinte:









