пятница, 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

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

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