|
|
|
Описание для автора не найдено
|
|
|
|
|
|
|
|
7.6 Класс DBObject
Автор: Захаров Андрей (zamer@lavitese.net), Ukraine .Net
Alliance (http://www.uneta.org/)
Октябрь 2004
Обзор: Класс DBObject обеспечивает доступ
к SQL-серверу, выбирая отдельную строку и затем отдельный столбец в пределах
этой строки, используя для этого XPath-подобные выражения. Данные столбцов могут
быть после считаны объектом класса DataReader и обновлены через объект
DBObject.
Введение
Синтаксис пути DBObject
Интерфейс класса DBObject
Интерфейс класса XmlQueryArgumentList
Использование класса DBObject
Обновление значения столбца с помощью DBObject
Введение
Класс DBObject обеспечивает доступ к SQL-серверу, выбирая отдельную строку и
затем отдельный столбец в пределах этой строки, используя для этого
XPath-подобные выражения. Данные столбцов могут быть после считаны объектом
класса DataReader и обновлены через объект DBObject.
Синтаксис пути DBObject
Чтобы выбрать строку и столбец, класс DBObject предоставляет свойство Path.
Значение этого свойства содержит XPath-подобное выражение, которое определяет
требуемую строку и столбец. Общий синтаксис:
"dbobject/table-name[row-specifier]/@column-name"
table-name - имя таблицы в базе данных.
Этот параметр не может включать специальные символы, а также символы “[” или
“/”.
column-name - имя столбца в пределах таблицы.
Это параметр не может включать никаких специальных символов.
row-specifier - определяет строку для выбора в пределах таблицы. Формат этой
строки:
$value - значение в целевой строке. Обычно путь использует primary key
столбец. Это значение передают в XPath, чтобы заменить соответствующие значение
параметров объекта XmlQueryArgumentList. Множественные row-specifier могут быть
включены в путь с использованием связки AND, например:
@columnA-name=$value1 AND @columnB-name=$value2
В качестве примера рассмотрим значение свойства Path, которое выбирает из
столбца Address (таблица Northwind SQL-сервера) строки, для
которых значение в столбце CustomerID равно ThisCustID:
"dbobject/Customers[@CustomerID=$ThisCustID]/@Address"
Интерфейс класса DBObject
Интерфейс класса DBObject довольно прост и содержит единственный конструктор,
единственное свойство и два метода. Каждый из методов поддерживает четыре
перегруженных метода.
Конструктор |
Описание |
DBObject() |
Создает новый объект класса DBObject со свойством Path, установленным
в пустую строку. |
Интерфейс класса DBObject
Свойство |
Описание |
Path |
Устанавливает или возвращает значение типа String, которое
используется в XPath-выражении для выбора строк и столбцов
таблицы. |
Свойства класса DBObject
Метод |
Описание |
Retrieve(connection) |
Генерирует SELECT-выражение, основанное на текущем значении свойства
Path и выполняет его для базы данных, указанной в строке connection.
Возвращает объект DataReader, который представляет содержимое
столбца. |
Retrieve(argument-list, connection) |
Как и предыдущий, но использует объект XmlQueryArgumentList, который
содержит список значений $-параметров в пределах значения свойства
Path. |
Retrieve(stream, connection) |
Генерирует SELECT-выражение, основанное на текущем значении Path и
выполняет его для базы данных, указанной в строке connection. Результат
передается непосредственно объекту Stream. Не возвращает значений. |
Retrieve(stream, argument-list, connection) |
Как и предыдущий, но использует объект XmlQueryArgumentList, который
содержит список значений $-параметров в пределах значения свойства
Path. |
Update(bytes-array, connection) |
Генерирует UPDATE-выражение, основанное на текущем значении Path и
выполняет его для базы данных, указанной в строке connection. Массив
значений типа Byte добавляется в столбец, указанный в свойстве Path. Не
возвращает значений. |
Update(bytes-array, argument-list, connection) |
Как и предыдущий, но использует объект XmlQueryArgumentList, который
содержит список значений $-параметров в пределах значения свойства Path.
Не возвращет значения. |
Update(stream, connection) |
Генерирует UPDATE-выражение, основанное на текущем значении Path и
выполняет его для базы данных, указанной в строке connection. , Значение,
взятое непосредственно из объекта Stream добавляется в столбец, указанный
в свойстве Path. Не возвращает значений. |
Update(stream, argument-list, connection) |
Как и предыдущий, но использует объект XmlQueryArgumentList, который
содержит список значений $-параметров в пределах значения свойства Path.
Не возвращет значения. |
Методы класса DBObject
Интерфейс класса XmlQueryArgumentList
В описании класса DBObject, вы видели, что объект класса XmlQueryArgumentList
используется для передачи значений параметров XPath-выражения, описанного в
свойстве Path объекта DBObject. Главное предназначение класса
XmlQueryArgumentList - это передача аргументов в процесс XQuery или XSLT. Этот
класс имеет следующие методы:
Метод |
Описание |
AddParam(local-name, namespace-uri, value) |
Добавляет параметры local-name, namespace-uri и value к списку. Не
возвращает значений.local-name – локальное имя параметра; namespace-uri –
идентификатор пространства имен;value – значение параметра. |
GetParam(local-name, namespace-uri) |
Возвращает значения параметров local-name, namespace-uri и
value. |
RemoveParam(local-name, namespace-uri) |
Удаляет параметры local-name, namespace-uri и value из списка. Не
возвращает значения. |
Методы класса XmlQueryArgumentList
Использование класса DBObject
В качестве примера работы с классом DBObject рассмотрим код, который
извлекает значение из столбца CompanyName таблицы Customers базы Northwind для
ряда у которого значение первичного ключа CompanyID равно ANTON. В коде
создается и открывается соединение с базой данных, затем создается новый объект
DBObject и определяется XPath-выражение, для выборки строки и столбца.
' получить строку соединения
String connectstring="your-connection-string";
' создать и открыть соединение
SqlConnection conn=new SqlConnection(connectstring);
conn.Open();
' создать объект DBObject и установить свойство Path
DBObject dbObject=new DBObject();
dbObject.Path="dbobject/Customers[@CustomerID=$CustomerID]
/@CompanyName"
...
В следующем листинге создается объект XmlQueryArgumentList и к нему
добавляется параметр с именем CustomerID (значение параметра ANTON и пустая
строка для namespace). После этого вызывается метод Retrieve, чтобы вернуть
объект SqlDataReader, содержащий значение в целевом столбце, которое затем
выводится на экран.
...
' создать объект XmlQueryArgumentList и добавить параметр
XmlQueryArgumentList args=new XmlQueryArgumentList();
args.AddParam("CustomerID", "", "ANTON");
' восстановить значение из базы
SqlDataReader reader=dbObject.Retrieve(args, conn);
' вывести строку
Console.WriteLine(reader.GetString(0));
' закрыть соединение
conn.Close();
Обновление значения столбца с помощью DBObject
Код предыдущего примера может быть легко изменен, чтобы продемонстрировать,
как объект DBObject может использоваться для добавления значения в столбец
таблицы базы данных. Большая часть кода эдентична предыдущему примеру, но здесь
значение из текстового файла загружается в поток и затем добавляется в указанный
столбец.
' создать и открыть соединение, как ранее
...
' создать объект DBObject и установить свойство Path
DBObject dbObject=new DBObject();
dbObject.Path="dbobject/Customers[@CustomerID=$CustomerID]/
@CompanyName"
' создать объект XmlQueryArgumentList и добавить параметр
XmlQueryArgumentList args=new XmlQueryArgumentList();
args.AddParam("CustomerID", "", "ALFKI");
' загрузить значение из файла в поток и добавить его в столбец
FileInfo fileInfo=new FileInfo("c:\data\DBObjectNewData.txt");
FileStream stream=FileInfo.OpenRead();
dbBObject.Update(stream, args, Conn);
' закрыть поток
stream.Close();
' закрыть соединение
Conn.Close();
Никакая часть настоящей статьи не может быть воспроизведена или
передана в какой бы то ни было форме и какими бы то ни было средствами, будь то
электронные или механические, если на то нет письменного разрешения владельцев
авторских прав.
Материал, изложенный в данной статье, многократно
проверен. Но, поскольку вероятность технических ошибок все равно существует,
сообщество не может гарантировать абсолютную точность и правильность приводимых
сведений. В связи с этим сообщество не несет ответственности за возможные
ошибки, связанные с использованием статьи.
|
|
|
|
|
|
|