Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Служба Web заказа помещения для проведения мероприятий

Создайте новый проект службы Web в VS.NET с именем

PCSWebSrv2
. Для начала добавим код в обработчик
Application_Start
в
global.asax
. Мы хотим загрузить все данные из
PCSWebApp3.mdb
в множество данных и сохранить его. Это будет по большей части включать код, с которым мы знакомы, так как перенос базы данных в
DataSet
уже делали. Фактически, можно скопировать весь нужный код из
WebForm1.aspx.cs
в
PCSWebApp3
из
предыдущей главы, включая строку соединения с базой данных (которая здесь не показана, так как у читателя она должна быть, скорее всего, другой):

protected void Application_Start (Object sender, EventArgs e) {

 System.Data.DataSet ds;

 System.Data.OleDb.OleDbConnection оleDbConnection1;

 System.Data.OleDb.OleDbDataAdapter daAttendees;

 System.Data.OleDb.OleDbDataAdapter daRooms;

 System.Data.OleDb.OleDbDacaAdapter daEvents;

 oleDbConnection1 = new System.Data.OleDb.OleDbConnection;

 oleDbConnection1.ConnectionStnng = @" ... ";

 oleDbConnection1.Open; ds = new DataSet;

 daAttendees =

new System.Data.OleDb.OleDbDataAdapter(

"SELECT * FROM Attendees", oleDbConnection1);

 daRooms =

new System.Data.OleDb.OleDbDataAdapter(

"SELECT * FROM Rooms", oleDbConnection1);

 daEvents =

new System.Data.OleDb.OleDbDataAdapter(

"SELECT * FROM Events", oleDbConnection1);

 daAttendees.Fill(ds, "Attendees");

 daRooms.Fill(ds, "Rooms");

 daEvents.Fill(ds, "Events");

 oleDbConnection1.Close;

 Application["ds"] = ds;

}

Необходимо отметить важный код в последней строке. Объекты

Application
Session
) имеют коллекцию пар имя/значение, которую можно использовать для хранения данных. Здесь создается имя
ds
в хранилище объекта
Application
, которое получает сериализованное значение
DataSet
из
ds
, содержащее таблицы
Attendees
,
Rooms
и
Events
из базы данных. Это значение будет доступно всем экземплярам службы Web в любое время.

Чтобы приведенный выше код работал, нам нужно также добавить ссылку на пространство имен

System.Data
в пространстве имен
PCSWebSrv2
в
global.asax
:

namespace PCSWebSrv2 {

 ...

 using System.Data;

Эта техника очень полезна для данных, предназначенных только для чтения, так как несколько потоков выполнения смогут к нему обращаться, сокращая нагрузку на базу данных. Отметим, однако, что таблица

Events
скорее всего должна измениться и будет обновлять
DataSet
на уровне приложения, когда это произойдет. Мы скоро это увидим.

Затем необходимо

добавить к службе в
Service1.asmx.cs
метод
GetData
:

[WebMethod]

public DataSet GetData {

 return (DataSet)Application["ds"];

}

Здесь для доступа к множеству данных используется тот же синтаксис, что и в

Application_Load
, где просто выполняется преобразование типа данных в правильный тип, а также возврат.

Метод

AddEvent
немного сложнее. Концептуально нам необходимо сделать следующее:

□ Получить данные события от клиента.

□ Создать инструкцию SQL

INSERT
с помощью этих данных.

□ Соединиться с базой данных и выполнить инструкцию SQL.

□ Если добавление выполнится успешно, то обновить данные в

Application["ds"]
.

□ Вернуть уведомление об успехе или отказе клиенту (мы оставляем клиенту возможность обновить его

DataSet
, если потребуется).

Начиная сверху, принимаем все поля как строки:

[WebMethod]

public int AddEvent(String eventName, String eventRoom, String eventAttendees, String eventDate) {

}

Затем мы объявляем объекты, которые нужны для доступа к базе данных, соединяемся с базой данных и выполняем запрос, используя код аналогичный коду в

PCSWebApp3
(здесь также требуется строка соединения, которая здесь не показана):

[WebMethod]

public int AddEvent(String eventName, String eventRoom, String eventAttendees, String eventDate) {

 System.Data.OleDb.OleDbConnection oleDbConnection1;

 System.Data.OleDb.OleDbDataAdapter dbEvents;

 DataSet ds;

 oleDbConnection1 = new System.Data.OleDb.OleDbConnection;

 OleDbConnection1.ConnectionString = @" ... ";

 String oleDbCommand =

"INSERT INTO Events (Name, Room, AttendeeList, " +

" EventDate) VALUES ('" + eventName + "', +

eventRoom + "', '" + eventAttendees + "', '" + eventDate + "')";

 System.Data.OleDb.OleDbCommand insertCommand =

new System.Data.OleDb.OleDbCommand(oleDbCommand, oleDbConnection1);

 oleDbConnection1.Open;

 queryResult = insertCommand.ExecuteNonQuery;

}

Используем, как и прежде,

queryResult
для хранения числа строк, затронутых запросом. Мы можем проверить его, чтобы оценить наш успех. Если все происходит хорошо, выполняется новый запрос на базе данных для обновления таблицы
Events
в нашем
DataSet
. Жизненно важно блокировать данные приложения во время выполнения обновлений, чтобы гарантировать, что никакие другие потоки выполнения не могут получить доступ к
Application["ds"]
во время его обновления. Это можно сделать с помощью методов
Lock
и
UnLock
объекта
Application
:

Поделиться:
Популярные книги

Брак по принуждению

Кроу Лана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Брак по принуждению

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Бастард

Майерс Александр
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит

Семь Нагибов на версту

Машуков Тимур
1. Семь, загибов на версту
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Семь Нагибов на версту

Идеальный мир для Лекаря 18

Сапфир Олег
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 18

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Дочь опальной герцогини

Лин Айлин
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дочь опальной герцогини

Любимая учительница

Зайцева Мария
1. совершенная любовь
Любовные романы:
современные любовные романы
эро литература
8.73
рейтинг книги
Любимая учительница

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7