:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Простір імен System.Data.OleDb

    Простір імен System.Data.OleDb містить класи, використовувані при взаємодії з OLE DB-совместимыми базами даних (такими, як Microsoft Access або Microsoft Fox Pro). Зазвичай в програмах використовуються класи Oledbconnectl on, Oledbcommand і Oledbdatareader цього простору імен. Нижче приведені короткі описи цих важливих класів.

    • Клас Oledbconnection: можна вважати, що цей клас представляє з'єднання з джерелом даних OLE DC і містить властивості, необхідні для підключення до бази даних (дані провайдера OLE DB, ім'я користувача і пароль). Після з'єднання в екземплярі класу зберігаються додаткові метадані про базу даних.
    • Клас Oledbcommand: клас представляє команди SQL, вживані до бази даних OLE DB. Разом з командою зберігаються всі параметри і додаткова інформація, необхідна для обробки запиту.
    • Клас Oledbdatareader: використовується після отримання даних від джерела за допомогою двох класів, описаних вище. Є спеціалізованою формою класу потоку введення (див. розділ 9) і уміє тільки читати дані, повертані об'єктом Oledbcommand. Аналогом об'єкту Datareader в ADO є набір записів, що зберігається на сервері, доступний тільки для читання і перебір, що підтримує тільки, в прямому напрямі.

    Нижче приведений приклад використання цих трьох класів. Наше застосування підключається до бази даних Northwind, що входить в постачання Access і сучасних версій SQL Server.

    1 Imports System.Data.OleDb

    2 Module Modulel

    3 Sub Maint)

    4 Dim myaccessconn As Oledbconnection

    5 Dim dbreader As Oledbdatareader

    6 Dim dbcmd As Oledbcommand =New Oledbcommand(

    7 "SELECT Employees.FirstName.Employees.LastName FROM Employees")

    8 Try

    9 ' Відкрити з'єднання

    10 myaccessconn = New Oledbconnection(

    11 "Provider=microsoft.Jet.OLEDB.4.0;" &_

    12 "Data Source=c:\program Files \Microsoft _

    Office\0ffice\samplesnnorthwind.mdb")

    13 myaccessconn.Open()

    14 dbcmd.Connection = myaccessconn

    15 dbreader = dbcmd.ExecuteReader(Commandbehavior.SingleResult)

    16 Do While dbreader.Read()

    17 Console.WriteLine(dbreader.GetString(0) & " " & _

    dbreader.GetString(1))

    18 Loop

    19 Console.ReadLine()

    20 Catch e As Exception

    21 Msgbox(e.Message)

    22 End Try

    23 End Sub

    24 End Module

    Результати, отримані при запуску цього застосування, показані на мал. 11.1.

    Мал. 11.1. Результати виконання простого запиту SQL

    Хоча наше застосування всього лише виводить список працівників Northwind, його код типовий для підключення до будь-якої бази даних при допомозі .NET-провайдера OLE DB, наданого VB .NET. У рядку 1 для спрощення подальших посилань імпортується простір імен System. Data. 0ledb. У рядках 4 і 5 оголошуються дві об'єктні змінні. Об'єкт 0ledbconnecti on інкапсулює поточне з'єднання до провайдера OLE DB і кінець кінцем до бази даних (рядки 10-12). Об'єкт 0ledbdatareader інкапсулює робочі дані. На відміну від об'єктів Recordset ці дані не зобов'язані відноситися до однієї таблиці (хоча в нашому прикладі це саме так). Рядок 6 визначає запит SQL, що зберігається в об'єкті Oledbcommand. Використана версія конструктора з параметром типу Stri ng, в якому передається команда SQL, — в нашому випадку це простий зі всіх можливих запитів. У рядку 10 створюється з'єднання з базою даних. При виклику конструктора передається рядок з ім'ям провайдера OLE DB. Значення береться з реєстру Windows і не є частиною .NET (у нашому прикладі використовується стандартний провайдер для Access). Також звернете увагу на жорстке кодування місцезнаходження бази даних Northwind; у нашому прикладі вибраний каталог, використовуваний за умовчанням при установці Office. Якщо на вашому комп'ютері база даних Northwind знаходиться в іншому каталозі, відредагуйте цей рядок.

    Потім створене з'єднання відкривається. Оскільки ця операція з різних причин може завершитися невдачею, програмний код відкриття і читання з бази даних полягає в блок Try-catch. Після успішного виклику Ореn() (рядок 13) з'єднання можна використовувати в програмі (виконання цих операцій в конструкторі дозволило б скоротити програму на декілька рядків). Об'єкт Oledbcommand поки не знає, яке з'єднання він повинен використовувати, тому відкрите з'єднання з базою даних призначається властивості Connecti on об'єкту Oledbcommand (рядок 14). Одна з переваг подібного рішення полягає в тому, що воно дозволяє використовувати один об'єкт команди з декількома з'єднаннями.

    Команда виконується методом Executereader() об'єкту 0ledbcommand (рядок 15). Ми використовуємо метод Executereader, оскільки решту методів Execute повертають дані у форматі XML і традиційні набори записів, що обробляються менш ефективно. У рядку 14 значення перераховуваного типу Commandbehavior. Singleresul t передається методу Executereader як параметр. Прапор Si ngl eresult означає, що команда повинна вибрати з бази даних всі записи результату. Інші прапори дозволяють обмежити вибірку однією або декількома записами. Прочитані записи перебираються в циклі в рядках 16-18.

    Код перебору записів еквівалентний наступному фрагменту Vb6/ado:

    Do While Not rs.EOF

    Print rs(0)

    rs.MoveNext() Loop

    Використання методу Read запобігає одній поширеній помилці, що часто допускається програмістами Vb6 ADO, які забувають перейти до наступного запису методом Movenext. Всі операції з одним записом виконуються між викликами Read, оскільки після виклику Read повернутися до вмісту попереднього запису вже не вдасться.

    У циклі викликаються різні методи GETXXX об'єкту 01 edbreader, що повертають значення поля із заданим індексом (нумерація полів запису починається з 0). Таким чином, виклик

    dbreader.GetString()

    повертає значення другого стовпця у форматі String. Замість індексу при виклику Getstrlng можна вказати ім'я стовпця, але цей варіант менш ефективний.

    Перед набуттям значення поля необхідно вказати правильний тип. Ми завжди про-грамміруєм в режимі Option Strict On, тому перетворення даних з втратою точності допускаються лише з явним приведенням до заданого типу.

    System. Data.SqlClient

    Читання даних з бази SQL Server походить аналогічним чином — простори імен Oledb і Sqlclient мають практично однаковий синтаксис. Нижче приведена версія попередньої програми для SQL Server:

    Imports System.Data.SqlClient

    Module Modulel

    Sub Main()

    Dim mysqlconnstring As String

    Dim mysqlconn As Sqlconnection

    Dim dbreader As Sqldatareader

    Dim dbcmd As Sqlcommand = New Sqlcommand(

    "SELECT Employees.FirstName.Employees.LastName FROM

    Employees") Try

    mysqlconnstring = _

    "uid-test:password=apress;

    database=northwind:server=apress"

    mysqlconn = New Sqlconnection(mysqlconnstring)

    mysqlconn.Open()

    dbcmd.Connection = mysqlconn

    dbreader = dbcmd.ExecuteReader(Commandbehavior.SingleResult)

    Do While dbreader.Read()

    ' Вивести дані в консольному вікні

    Console.WriteLinetdbReader.GetString(0) & "." &_

    dbreader.GetString(1))

    Loop

    Catch e As Exception Msgbox(e.Message)

    End Try

    Console. Readline()

    End Sub

    End Module

    Основна відмінність (окрім імен класів) спостерігається у форматі рядка з'єднання. Передбачається, що на сервері Apress є обліковий запис з паролем apress. При підключенні до SQL Server в рядку з'єднання указується ідентифікатор користувача, пароль, сервер і ім'я бази даних. Передаючи цю інформацію, ми отримуємо об'єкт з'єднання. Звичайно, лише прості запити формулюються у вигляді простого рядка; у будь-якому скільки-небудь нетривіальному випадку рядок запиту доводиться будувати з окремих фрагментів.

    Не дивлячись на різний формат рядків з'єднання, в додатках SQL і OLE Dв використовується одна і та ж програмна модель ADO .NET — це вельми істотна перевага. Наявність загальних інтерфейсів Idbconnection, Idbcommand і так далі значно спрощує написання узагальненої коди в ADO .NET.

     




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©