Создаем класс OracleEmployeeProvider, который наследуется от EmployeesProvider. В нем реализовано три функции: GetEmployees, GetEmployeesCount и UpdateEmployee - мы переопределили прописанные в абстрактном классе EmployeesProvider функции для работы с таблицей Employees БД.
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OracleClient;
using Paging;
/// <summary>
/// Класс - провайдер для доступа к таблице Employees
/// </summary>
public class OracleEmployeeProvider: EmployeesProvider
{
//Получение списка записей из БД
public override List<EmployeeDetails> GetEmployees(int jobId, int pageIndex, int pageSize, String employeesSort)
{
using (var connection = new OracleConnection(OracleConnectionString))
{
switch (employeesSort)
{
case "":
employeesSort = "empId";
break;
case "fullName":
employeesSort = "LASTNAME";
break;
case "fullName DESC":
employeesSort = "LASTNAME DESC";
break;
}
var cmd =
new OracleCommand("Select EMP_ID as empId,JOB_ID as jobId,FIRST_NAME as firstName,LAST_NAME as lastName,Salary FROM (SELECT a.*, ROWNUM r FROM (SELECT * FROM EMPLOYEES WHERE JOB_ID = :pJOB_ID)a where rownum <= :HigerBound) where r >= :LowerBound order by " + employeesSort, connection)
{CommandType = CommandType.Text};
var lowerBound = pageIndex * pageSize + 1;
var higerBound = (pageIndex + 1) * pageSize;
cmd.Parameters.Add(new OracleParameter("pJOB_ID", jobId));
cmd.Parameters.Add(new OracleParameter("HigerBound", higerBound));
cmd.Parameters.Add(new OracleParameter("LowerBound", lowerBound));
connection.Open();
IDataReader reader = ExecuteReader(cmd, CommandBehavior.SingleRow);
if (reader.Read())
{
return GetEmployeeListFromReader(reader);
}
return null;
}
}
//Получение количества записей из БД
public override int GetEmployeesCount(int jobId)
{
using (var connect = new OracleConnection(OracleConnectionString))
{
var command = new OracleCommand("SELECT COUNT(*) FROM EMPLOYEES WHERE JOB_ID= :PJOB_ID", connect);
command.CommandType = CommandType.Text;
command.Parameters.Add("PJOB_ID", OracleType.Int32).Value = jobId;
connect.Open();
return Convert.ToInt32(ExecuteScalar(command));
}
}
//Обновление записей
public override bool UpdateEmployee(EmployeeDetails employee)
{
using (var connect = new OracleConnection(OracleConnectionString))
{
var command = new OracleCommand("UPDATE EMPLOYEES SET SALARY = :PSALARY WHERE EMP_ID = :PEMP_ID",connect);
command.CommandType = CommandType.Text;
command.Parameters.Add("PSALARY", OracleType.Double).Value = employee.Salary;
command.Parameters.Add("PEMP_ID", OracleType.Int32).Value = employee.EmpId;
connect.Open();
Int32 ret = ExecuteNonQuery(command);
return (ret == 1);
}
}
}
Создаем класс OracleJobProvider, который наследуется от JobsProvider. В нем переопределены функции: GetJobs() и GetJobById() - мы переопределили прописанные в абстрактном классе JobsProvider функции для работы с таблицей Jobs БД.
На этом рассмотрение слоя DAL закончено. В следующей статье рассмотрим слой бизнес логики, в котором реализована группа классов, преобразующая информацию полученную из БД в объектный вид и передающая ее "наверх" в слой пользовательского интерфейса (UI).
Комментариев нет:
Отправить комментарий