Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab4.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
354.39 Кб
Скачать

3.5 Реализация шаблона проектирования Data Access Object

Шаблон проектирования Объект доступа к данным (Data Access Object – DAO) используется для инкапсуляции доступа к источнику данных. Через данный объект в нашем случае будет обеспечиваться взаимодействие приложения и базы данных. Data Access Object всегда выносится в один или несколько дополнительных классов, работающих с источником данных, и не является частью триады Модель-Представление-Контроллер. Для каждой таблицы в БД необходимо создавать отдельный класс в DAO. На Листинге 2 показан класс DAO, реализующий соединение с базой данных. На Листинге 3 представлен RecordsDAO – наследник от DAO – класс, реализующий работу с данными в таблице GuestBook. Внесите эти классы в приложение.

Листинг 2 – Класс, реализующий соединение с БД – DAO\DAO.cs

using System.Data.SqlClient;

namespace mvcApplication.DAO

{

public class DAO

{

private const string ConnectionString =

"Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\Work\\Университет\\Семестр #9

(сен-дек 2009)\\Test\\mvcApplication\\App_Data\\Test.mdf\";

Integrated Security=True;User Instance=True";

private SqlConnection Connection { get; set; }

public void Connect()

{

Connection = new SqlConnection(ConnectionString);

Connection.Open();

}

public void Disconnect()

{

Connection.Close();

}

}

}

Листинг 3 – Класс, реализующий взаимодействие с таблицей GuestBookDAO\RecordsDAO.cs

using System;

using System.Collections.Generic;

using System.Data.SqlClient;

using mvcApplication.Models;

namespace mvcApplication.DAO

{

public class RecordsDAO : DAO

{

public List<Records> GetAllRecords()

{

Connect();

List<Records> recordList = new List<Records>();

try

{

SqlCommand command = new SqlCommand("SELECT * FROM GuestBook", Connection);

SqlDataReader reader = command.ExecuteReader();

while (reader.Read())

{

Records record = new Records();

record.ID = Convert.ToInt32(reader["ID"]);

record.Author = Convert.ToString(reader["Author"]);

record.Title = Convert.ToString(reader["Text"]);

record.PublicationDate = Convert.ToDateTime(reader["PublicationDate"]);

recordList.Add(record);

}

reader.Close();

}

catch (Exception)

{

// Не обрабатывать исключительные ситуации - дурной тон

}

finally

{

Disconnect();

}

return recordList;

}

}

}

3.6 Создание контроллера

Контроллер (Controller). Является средством, при помощи которого пользователи взаимодействуют с системой, а также является управляющим элементом для обмена данными между представлением и моделью.

Для создания контроллера нажимаем правой кнопкой мыши на папке Controllers и выбираем Add/Controller… В появившемся окне задаем имя контроллера HomeController и ставим флажек напротив Add action methods for Create, Update, and Details scenarios – последнее позволит создать несколько action-методов, которые будут реагировать на запросы от представления (Рисунок 7).

Рисунок 7 – Добавление контроллера

В результате создания Home контроллера система сгенерирует следующий класс (Листинг 4):

Листинг 4 Controllers\HomeController.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Mvc.Ajax;

namespace mvcApplication.Controllers

{

public class HomeController : Controller

{

//

// GET: /Home/

public ActionResult Index()

{

return View();

}

//

// GET: /Home/Details/5

public ActionResult Details(int id)

{

return View();

}

//

// GET: /Home/Create

public ActionResult Create()

{

return View();

}

//

// POST: /Home/Create

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Create(FormCollection collection)

{

try

{

// TODO: Add insert logic here

return RedirectToAction("Index");

}

catch

{

return View();

}

}

//

// GET: /Home/Edit/5

public ActionResult Edit(int id)

{

return View();

}

//

// POST: /Home/Edit/5

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Edit(int id, FormCollection collection)

{

try

{

// TODO: Add update logic here

return RedirectToAction("Index");

}

catch

{

return View();

}

}

}

}

Чтобы можно было передавать в представление данные из модели на страницу (сделаем вывод всех контактов на странице), нужно модифицировать Home контроллер следующим образом:

Листинг 5 Модификация Controllers\HomeController.cs

public class HomeController : Controller

{

RecordsDAO recordsDAO = new RecordsDAO();

//

// GET: /Home/

public ActionResult Index()

{

return View(recordsDAO.GetAllRecords());

}

}

Также добавим пространства имен:

using mvcApplication.Models;

using mvcApplication.DAO;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]