Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 226

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 220 221 222 223 224 225 < 226 > 227 228 229 230 231 232 .. 260 >> Следующая

ГЛАВА 13 Создание эффективных Windows-приложений 525
Visual Basic -NET
'Связывание элемента управления Тех'Вех с объектом DataColumn TextBox. DataBindings.AddCText". DataSet, "TableName. ColumnName")
'Связывание злггента управления DataGria с объектом DataTable
DataGrid.DataSource = DataSet Datai'; r id. Oat a Member = "ТаЫеМапз"
Visual C# .NET
.//Связывание элемента управления TextBox с объектом DataColumn TextBox. DataBindings.AddCText", DataSet, "TableName.ColumnName");
элемента управления DataGrid с объектом DataTable
DataGrid.DataSource = DataSet; DataGrid.DataMember = "TableName";
Вопрос. При запуске приложения мне нужно загружать данные. Ваши рекомендации?
Ответ. Убедитесь, что эти данные действительно вам необходимы. Очевидно, что на возврат меньшего числа записей и/или столбцов потребуется меньше времени. Еще один вариант воспользоваться имеющейся в Framework поддержкой многопоточности и загрузить данные при запуске приложения в другом потоке. Подробнее — в разделе документации .NET Frarrstwor/a SDK. посвященном пространству имен Framework упрощает работу с
ми, особенно пользователям Visual Basic, однако тема управления потоками лежит вне круга вопросов, освещаемых в данной книге.
Вопрос. Почему в коде на этапе разработки приложения-примера положение текущего заказа определяется с помощью объекта ikiinx Дчг а не 1ЫоТаЬк''.
Ответ. Если пометить объект как уда.тпшый он по-прежнему будет
находиться в наборе Rows объекта DataTable. Приложение позволяет помечать
заказы на и если бы в нем использовался только объект DataTable, по-
требовалось бы на порядок больше кода, чтобы при перемещении по оставшимся заказам пропускать заказы, помеченные как удаленные.
Вместо этого приложение применяет объект Если не изменять зна-
чение свойства ШШаШШтобъекта DataView по умолчанию, через этот объект окажутся недоступными записи, помеченные как удаленные, что упрощает процесс перемещения по оставшимся заказам. Объект рует аналогичным образом.
Вопрос. Какждсйс-тволггг, пессимистичное управление блокировками в многоуровневом приложении, использующем промежуточный уровень без поддержки сведений о состоянии?
526
Часть IV Создание эффективных приложений с использованием AOO.NET
Ответ. Я уже говорил, что пессимистическое управление блокировками на самом деле требуется лишь ограниченному кругу приложений. Определенно, пессимистическое управление блокировками в многоуровневом приложении, промежуточный уровень которого не поддерживает сведений о состоянии — трудная задача. Такая функциональность необходима системам бронирования авиабилетов. Пользователь бронирует место на борту самолета, и система блокирует соответствующую запись данных, чтобы никому больше не удалось заказать это место.
Давайте вкратце остановимся на архитектуре. Поскольку приложение обращается к БД через промежуточный уровень без хранения сведений о состоянии, оно должно поддерживать блокировки, заданные даже при отсутствии
живых соединений. Кстати, я не знаю ни одной СУБД, которая удерживала бы заданную пользователем блокировку, пока пользователь не подключится снова, если он отсоединился.
Тем не менее для реализации этой функциональности можно разработать собственную схему ол< iiaipi >ккм. Если честно, мне не приходилось развертывать многоуровневые приложения, основа; 1!!ьл.- на такой архитектуре. Но если бы мое существование зависело от разработки подобных приложений, обращающихся к
СУБД SQL Server, я бы поступил следующим образом.
Настроил параметры БД таким образом, чтобы могли изменять
содержимое таблиц только посредством вызовов хранимых процедур.
2. Добавил в таблицу два столбца: один с уникальным ключом блокировки, а другой — с датой и временем успешного наложения блокировки пользователем,
3. Создал хранимую процедуру, позволяющую налагать блокировку на ряд данных. Хранимая процедура принимает в качестве параметров ввода первичный ключ ряда, а также Если на ряде нет блокировки, процедура помечает его как заблокированный. Вот пример такой процедуры:
CREATE PROCEDURE spPessimlsUcLockAc<juireLock
(GID int, eLocklD uniqueidentifier)
AS
UPDATE tblPessimiSticLock
SET LockAcquired = GetDateO, LocklD = §LockIO WHERE ID = 910 AND LockAcquired IS NULL
4. Создал хранимую процедуру, позволяющую редактировать содержимое ряда. Эта процедура принимает параметры с полями первичного ключа ряда, новыми данными ряда и с ключом блокировки. Процедура обновляет ряд, только
если переданный ключ блокировки соответствует ключу, имеющемуся в БД.
Успешно обновив ряд, процедура снимает с него блокировку.
CREATE PROCEDURE spPessimisticLockUpdateFlow
(.»ID int, SDescCol varchar(32), (aLocklD uniqueidentifier)
AS
UPDATE tblPessimiSticLock
SET DescCol = mescCol
WHERE 10 = §10 AND LocklD = iLocklD IF #@R0WC0UNT = 1 BEG1H
ГЛАВА 13 Создание эффективных Windows-приложений
527
SET NOCOUNT ON
UPDATE tblPessiiitisticLock
SET LockAcqulred = NULL, LockID = NULL
WHERE ID = 6ID AND LockID = @LockID
END
5. Создал хранимую процедуру, позволяющую снять с ряда заданную блокировку.
Предыдущая << 1 .. 220 221 222 223 224 225 < 226 > 227 228 229 230 231 232 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100