(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Работа с хранимыми процедурами MS Access в VB.NET

Источник: vbstreets

Введение

Добро пожаловать во вторую часть Хранимых Процедур Access. Первая часть описывала в деталях, как создать хранимые процедуры в Access с помощью ADO.NET и Visual Basic.NET. Вторая часть покажет, как применять хранимые процедуры, созданные в первой части, настраивая Управление Доступом к базам данных, который может быть смоделирован и использован в ваших приложениях. Эта статья в деталях опишет осуществление Управления Доступом к Базе Данных для Visual Basic.NET.
    Главная цель Управления Доступом к Базе Данных заключается в создании ворот в базу данных через модуль класса. Этот модуль класса должен действовать, как клей между базой данных и приложением. В применении управления данными для доступа к вашей базе данных есть два преимущества. Вы получите возможность модифицировать технологию, лежащую в основе вашей базы данных (например, переход от MS Access к SQL Server) без преобразования вашего приложения более сложным способом. Вы, к тому же, можете поместить контрольный слой между вашим приложением и базой данных, что позволит вам гарантировать, что все данные «очищены» как следует. Управление Доступом к Базе Данных в .NET приложениях, вероятнее всего, будет содержаться в модуле класса, что хорошо согласовывается с объектно-ориентированным программированием. Более ранние версии Visual Basic использовали Стандартный Модуль для выполнения этой работы.

Управление Доступом к Базе Данных - Код

Настало время закатать рукава и написать немного кода. Первым делом после добавления пустого файла объявления класса нужно подключить библиотеки .NET Framework, указанные ниже.

Imports System
Imports System.Data
Imports System.Data.OleDb

Библиотека System стандартна для многих приложений, и я выработал в себе привычку включать ее почти во всех модулях с кодом. Библиотека System.Data необходима почти во всех приложениях для доступа к базе данных. System.Data.OleDb применяется специально для поставщиков OleDb Database, к которым принадлежит Microsoft Access. Если бы мы использовали SQL Server, мы бы подключили специального SQL-поставщика System.Data.SqlClient.
Затем следующая строка кода начинает определение класса:

Public Class DBTier

Здесь мы назвали класс DBTier и добавили ему модификатор Public, делая его, таким образом, доступным из других модулей кода. После того, как класс определен, объявляем все его свойства:

Shared connectionString As String = _
    "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program " _
    & "Files\Microsoft Office\Office10\Samples\Northwind.mdb"

Здесь объявлено только одно свойство, как строковая переменная, connectionString.Эта переменная содержит строку подключения с Access базой данных NorthWind. Объявление переменной, как Shared определяет ее, как «Переменную Класса». Переменная класса связывается с классом, но не с каждым объектом, происходящим из класса.
После объявления строки подключения вы обнаружите три подпрограммы и одну функцию. Функция возвращает dataset, содержащий список всех продуктов. Он вызывает хранимую процедуру procProductsList, созданную в первой части этой статьи.
    Затем вы обнаружите три подпрограммы. По одной на каждую хранимую процедуру - добавление, обновление и удаление продуктов. Все они имеют сходную структуру; в каждой есть объявленные команда, подключение и требуемый параметр (требуемые параметры). В качестве примера давайте разберем подпрограмму ProductsDeleteItem. Если вы поймете, как работает эта подпрограмма, вам будет легко разобраться и с остальными.
    Сначала программа принимает один параметр, ProductID, который является типом Integer и представляет продукт, который должен быть удален.

Sub ProductsDeleteItem(ByVal ProductID As Integer)

Затем объявляются все переменные. Это connection (подключение), command (команда) и параметр, переданный в хранимую процедуру. Этот параметр содержит удаляемый ProductID.

Dim con As OleDbConnection
Dim cmd As OleDbCommand = New OleDbCommand()
Dim paramProductID As New OleDbParameter()

Инициализируются объекты command (команда) и connection (подключение):

con = New OleDbConnection(connectionString)
cmd.Connection = con

Конфигурируются свойства параметра paramProductID. Затем параметр добавляется к объекту command. В данном случае параметр в хранимой процедуре называется inProductID, это величина integer, значение ее равно ProductID, переданному в подпрограмму.

With paramProductID
    .ParameterName = "inProductID"
    .OleDbType = OleDbType.Integer
    .Size = 4
    .Value = ProductID
End With
cmd.Parameters.Add(paramProductID)

Последняя часть собственно и вызывает хранимую процедуру.

cmd.CommandText = "EXECUTE procProductsDeleteItem"
con.Open()
cmd.ExecuteNonQuery()
con.Close()

Обратите внимание, что объект подключения остается открытым столько, сколько необходимо, чтобы вызвать хранимую процедуру и затем немедленно закрыть ее. Это уменьшает вероятность противоречий. Класс DBTier, включенный в эту статью, подробно описывает, как получить доступ к хранимой процедуре, но он нуждается в некоторых улучшениях, чтобы стать качественным кодом, так как он не содержит обработчика ошибок. Также здесь может быть необходимо дальнейшее улучшение работы кода. Исходный код этой статьи, который можно скачать, включает файл DBTier.vb и некоторые основные формы, чтобы проверить работу этого класса.
    В заключении, я надеюсь, что вы получите не мене двух выгод из этих статей. Первая та, что хранимые процедуры существуют и хорошо работают в Microsoft Access, хотя и не без некоторых ограничений. Вторая, вытекающая отсюда - это понимание необходимости разделять доступ приложения к данным на отдельные классы, подпрограммы и функции. Это делает поддержку и обновления гораздо более легким для осуществления.

Весь исходный код DBTier.vb:

Imports System
Imports System.Data
Imports System.Data.OleDb

' Функции и процедуры для выполнения хранимых процедур в Access.
Public Class DBTier

    ' Меняет Data Source на расположение Northwind.mdb в вашей 
    ' системе.
    Shared connectionString As String = _
        "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program " _
        & "Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    ' Эта функция возвращает набор данных dataset содержащий все данные
    ' в таблице Products.
    Function ProductsList() As DataSet
        Dim con As OleDbConnection
        Dim da As OleDbDataAdapter
        Dim ds As DataSet
        Dim sSQL As String


        sSQL = "EXECUTE procProductsList"

        con = New OleDbConnection(connectionString)
        da = New OleDbDataAdapter(sSQL, con)
        ds = New DataSet()
        da.Fill(ds, "Products")

        Return ds

    End Function

    ' Эта функция добавляет запись в таблицу Products.
    Sub ProductsAddItem(ByVal ProductName As String, _
        ByVal SupplierID As Integer, ByVal CategoryID As Integer)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand()
        Dim paramProductName As New OleDbParameter()
        Dim paramSupplierID As New OleDbParameter()
        Dim paramCategoryID As New OleDbParameter()

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramProductName
            .ParameterName = "inProductName"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
        cmd.Parameters.Add(paramProductName)

        With paramSupplierID
            .ParameterName = "inSupplierID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = SupplierID
        End With
        cmd.Parameters.Add(paramSupplierID)

        With paramCategoryID
            .ParameterName = "inCategoryID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = CategoryID
        End With
        cmd.Parameters.Add(paramCategoryID)

        cmd.CommandText = "EXECUTE procProductsAddItem"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

    ' Эта функция обновляет запись JobTitle, вставляя новые данные.
    Sub ProductsUpdateItem(ByVal ProductID As Integer, _
        ByVal ProductName As String)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand()
        Dim paramProductName As New OleDbParameter()
        Dim paramProductID As New OleDbParameter()

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramProductID
            .ParameterName = "inProductID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ProductID
        End With
        cmd.Parameters.Add(paramProductID)

        With paramProductName
            .ParameterName = "inProductName"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
        cmd.Parameters.Add(paramProductName)

        cmd.CommandText = "EXECUTE procProductsUpdateItem"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

    ' Эта функция удаляет запись из таблицы Products.
    Sub ProductsDeleteItem(ByVal ProductID As Integer)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand()
        Dim paramProductID As New OleDbParameter()

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramProductID
            .ParameterName = "inProductID"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ProductID
        End With
        cmd.Parameters.Add(paramProductID)

        cmd.CommandText = "EXECUTE procProductsDeleteItem"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

End Class

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 29.04.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft 365 Business Basic (corporate)
Microsoft 365 Apps for business (corporate)
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Corel DRAW - от идеи до реализации
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100