четверг, 25 октября 2012 г.

4."Пейджинг" в ASP.NET из БД Oracle (Подготовка слоя доступа к данным ч.3)


Создаем класс 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).

Комментариев нет:

Отправить комментарий