Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 
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 - определяет строку для выбора в пределах таблицы. Формат этой строки:

    @column-name=$value
    

    $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(); 
    
    Никакая часть настоящей статьи не может быть воспроизведена или передана в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, если на то нет письменного разрешения владельцев авторских прав.

    Материал, изложенный в данной статье, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, сообщество не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим сообщество не несет ответственности за возможные ошибки, связанные с использованием статьи.
     
         

       
       
         
      VBNet рекомендует