пятница, 3 февраля 2012 г.

Web Forms. Общаемся с БД

Идеология Web Forms очень похожа на идеологию Win Forms. Есть страницы с элементами управления, генерящими некие события.
Сделаем Web Application, которое умеет получать список книг и их жанров.
Создаем ASP.NET Web Application. Открываем файл «Web.config» и заменяем строку соединения, которая там есть, на строку соединения с нашей БД. (Как это сделать из самой студии – см здесь)
Ок, приложение есть. Теперь нам нужен ORM. Выбираем «Linq to SQL», так как он довольно простой. Хорошая интеграция со студией и самим SQL Server, основные возможности (отслеживание изменений, преобразование типов данных, генерация запросов…) все есть.
Solution – Add - New Project
Создаем проект, class Library Model. Выкидываем оттуда дефолтный класс «Class1.cs». Вместо него добавляем «LINQ to SQL Classes».

Назовем его «Books.dbml». Открываем его, открываем Server Explorer. Разворачиваем таблички нашей БД, выделяем нужные и просто перетаскиваем на форму.

Как только перетащили таблицы, студия сгенерила классы для работы с «Linq to SQL».
Возвращаемся в Web Application. Добавляем проект «Model» в «References». И создаем новую страницу:
Назовем ее Books.aspx. Переключим ее в режим дизайнера

Открываем Toolbox и перетаскиваем GridView на нашу страничку.

Перетащили. В свойствах таблички указываем «AutoGenerateColumns» значение «False» - «лишние колонки пропадут». Ну и заодно название меняем, например – gvBooks.
Щелкаем на стрелку справа вверху таблички – Edit columns. Можно еще в «AutoFormat» настроить внешний вид, чтобы было красиво J
В «Edit columns» добавляем две колонки типа «BoundField», в свойствах выставляем названия самих колонок – «HeaderText» и то, откуда приедет информация – «DataField».

Назовем источники информации для книг «BookName», а для жанров – «GenreName».
F7 – переход к коду страницы. Открывается метод «Page_Load» - который сработает при загрузке страницы.

Расписываем его.

Открываем соединение:

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))

ConfigurationManager обращение к конфигурационному файлу, в котором мы в самом начале поменяли строку соединения на нужную нам. Обращаемся к строке по имени - "ApplicationServices" – получаем объект, из которого достаем уже саму строку соединения.

Открываем транзакцию:

using (var tran = new TransactionScope())

TransactionScope потому что мы работаем с «Linq to SQL».

В транзакции:

var context = new BooksDataContext(conn);
var report = from b in context.Books select new { BookName = b.name, GenreName = b.Genre.name };
gvBooks.DataSource = report;
gvBooks.DataBind();
tran.Complete();

Проинициализировали контекст, с которым будем работать, мы создали файл «Books.dbml», к его названию надо добавить DataContext – получим класс, работающий с нашей БД.

Проинициализировали отчет, записанный с помощью линк-запроса, сделали выборку новых объектов, имеющих всего два параметра – BookName и GenreName (которые мы указали в «DataField» колонок таблицы)

Потом указали, что DataSource нашей таблички – тот самый отчет. И Заполнили ее командой DataBind. После чего завершили транзакцию.

Теперь открываем «Site.Master», находим там NavigationMenu и добавляем туда строку

<asp:MenuItem NavigateUrl="~/Books.aspx" Text="Книги"/>



Все, запускаем наше приложение и любуемся результатом J

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

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