|
|
|||||||||||||||||||||||||||||
|
Работа с хранимыми процедурами MS Access в VB.NETИсточник: vbstreets
ВведениеДобро пожаловать во вторую часть Хранимых Процедур Access. Первая часть описывала в деталях, как создать хранимые процедуры в Access с помощью ADO.NET и Visual Basic.NET. Вторая часть покажет, как применять хранимые процедуры, созданные в первой части, настраивая Управление Доступом к базам данных, который может быть смоделирован и использован в ваших приложениях. Эта статья в деталях опишет осуществление Управления Доступом к Базе Данных для Visual Basic.NET. Управление Доступом к Базе Данных - КодНастало время закатать рукава и написать немного кода. Первым делом после добавления пустого файла объявления класса нужно подключить библиотеки .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 определяет ее, как «Переменную Класса». Переменная класса связывается с классом, но не с каждым объектом, происходящим из класса. 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 и некоторые основные формы, чтобы проверить работу этого класса. Весь исходный код 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 Ссылки по теме
|
|