Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

 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
:

  • Читать дальше
  • 1
  • ...
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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