Работа с хранимыми процедурами MS Access в VB.NET. Часть 1Источник: vbstreets
В самых недавних релизах Microsoft Access большие усилия были затрачены для придания этому продукту полноты набора функций системы реляционной базы данных. Хранимые процедуры - функциональность, обычно связываемая с промышленными системами баз данных, такими как SQL Server, теперь могут быть найдены в Access. Хранимые процедуры стали доступны, начиная с Access 2000, и они являются естественными для Jet 4 Database Engine. Если вы знакомы с использованием хранимых процедур в SQL Server, то вы сможете применять их, оставаясь дома так же, как вы пользуетесь Access. Однако, нужно иметь в виду некоторые ограничения. Я буду обсуждать их позже. Эта статья будет разделена на две части. Первая часть в деталях опишет, как создавать хранимые процедуры в Access с помощью ADO.NET и Visual Basic.NET. Вторая часть покажет, как использовать хранимые процедуры, созданные в первой части, настраивая уровень доступа к данным, который может быть смоделирован и использован в ваших приложениях. Код в этой статье был проверен в Access 2002, но он, так же, будет работать и в Access 2000. Как хранимые процедуры работают в Access?В отличие от других объектов в Access хранимые процедуры не имеют интерфейса и не могут быть созданы или использованы через Access User Interface (пользовательский интерфейс Access). Получить их в вашей базе данных можно только одним способом - просто кодировать их. Я покажу, как это делается в ADO.NET. Создание хранимых процедурДля демонстрации сначала я покажу, как создать SQL-операторы для создания хранимых процедур. В конце статьи я покажу весь код, необходимый для выполнения этих операторов в базе данных. Используется база данных Northwind, которая поставляется вместе с Access, будут созданы четыре хранимых процедуры. Все они будут применены к таблице Products (Продукты), начнем с самой простой; выберем все данные из каждой строки таблицы. Чтобы создать хранимую процедуру, выполните следующий оператор в базе данных: "CREATE PROC procProductsList AS SELECT * FROM Products;" Оператор: "CREATE PROC procCustomerList" является частью, которая в действительности создает хранимую процедуру. Частью, которая следует за "AS" может быть любой действительный SQL-оператор. "CREATE PROC procProductsDeleteItem(inProductsID LONG)" & _ "AS DELETE FROM Products WHERE ProductsID = inProductsID;" В первой строке обратите внимание на скобку сразу после объявления CREATE PROC. Это параметр, объявленный как значение Long. Вот куда вы добавляете переменную для удаления записи. "CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " & _ "inSupplierID LONG, inCategoryID LONG) " & _ "AS INSERT INTO Products (ProductName, SupplierID, CategoryID) " & _ "Values (inProductName, inSupplierID, inCategoryID);" "CREATE PROC procProductsUpdateItem(inProductID LONG, " & _ " inProductName VARCHAR(40)) " & _ "AS UPDATE Products SET ProductName = inProductName " & _ " WHERE ProductID = inProductID;" Заметьте, что параметры разделены запятыми, если их определено более одного. ОграниченияЗдесь вы можете наткнуться на некоторые ограничения, особенно если использовали мощный SQL Server.
ВыводНадеюсь, эта статья станет руководством в несколько недокументированной области Access и Jet, которая исследована еще не всеми. Для получения дополнительной информации о том, как код ADO.NET работает в подпрограмме CreateStoredProc обратитесь к Getting Started with ADO.NET (Начало работы с ADO.NET) Гарнита Сингха. Далее следует полный листинг кода, представленного в этой статье: Imports System Imports System.Data Imports System.Data.OleDb Module CreateSP Sub Main() ProductsProcs() End Sub ' Products Stored Procs to be added to the db. Sub ProductsProcs() Dim sSQL As String ' procProductsList - Retrieves entire table sSQL = "CREATE PROC procProductsList AS SELECT * FROM Products;" CreateStoredProc(sSQL) ' procProductsDeleteItem - Returns the details (one record) from the ' JobTitle table sSQL = "CREATE PROC procProductsDeleteItem(@ProductID LONG) AS " _ & "DELETE FROM Products WHERE ProductID = @ProductID;" CreateStoredProc(sSQL) ' procProductsAddItem - Add one record to the JobTitle table sSQL = "CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " _ & "inSupplierID LONG, inCategoryID LONG) AS INSERT INTO " _ & "Products (ProductName, SupplierID, CategoryID) Values " _ & "(inProductName, inSupplierID, CategoryID);" CreateStoredProc(sSQL) ' procProductsUpdateItem - Update one record on the JobTitle table sSQL = "CREATE PROC procProductsUpdateItem(inProductID LONG, " _ & "inProductName VARCHAR(40)) AS UPDATE Products SET " _ & "ProductName = inProductName WHERE ProductID = inProductID;" CreateStoredProc(sSQL) End Sub ' Execute the creation of Stored Procedures Sub CreateStoredProc(ByVal sSQL As String) Dim con As OleDbConnection Dim cmd As OleDbCommand = New OleDbCommand() Dim da As OleDbDataAdapter ' Change Data Source to the location of Northwind.mdb on your local ' system. Dim sConStr As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data " _ & "Source=C:\Program Files\Microsoft " _ & "Office\Office10\Samples\Northwind.mdb" con = New OleDbConnection(sConStr) cmd.Connection = con cmd.CommandText = sSQL con.Open() cmd.ExecuteNonQuery() con.Close() End Sub End Module |