Робота з збереженими процедурами MS Access в VB.NET, MS Office, Програмні керівництва, статті

Введення

Ласкаво просимо в другу частину збережених процедур 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 ” _
& “FilesMicrosoft OfficeOffice10SamplesNorthwind.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 ” _
& “FilesMicrosoft OfficeOffice10SamplesNorthwind.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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*