欢迎来到MS Access存储过程的第二部分讨论。第一部分详细地描述了如何使用ADO.NET和Visual Basic.NET在Access中创建存储过程. 第二部分将会示范如何通过数据库访问层访问在第一部分已经创建的存储过程,你可以模仿它并且用在自己的应用程序里。这篇文章会详细地描述如何使用Visual Basic.NET实现数据库的访问层。
数据库层的主要目的是通过类模块提供一个访问数据库的网关。这个类模块将充当数据库和应用程序之间的粘合剂。利用数据库访问层来访问数据库有2个优点:你可以有改变你的后台数据库技术(从Access改到SQL Server)而不影响应用系统的能力。你还能够通过在应用程序和数据库访问层之间增加一个控制层,来保证传过去的数据是“纯净”的。在.NET里,数据库访问层通常会包括一个遵循面向对象规范的类模块,而Visual Basic 的较早的版本会使用一个标准模块来处理。
数据库访问层 - 代码
现在该是我们卷起袖子来看一些代码的时候了。在添加一个空类以后的第一件事情,就是列出这里需要使用的.NET类库,如下所示:
Imports System
Imports System.Data
Imports System.Data.OleDb
System 库 对大多数程序来说是标准的, 但是我把它作为一个习惯,在所有的代码中都包含这个类库。而System.Data 库则是一个对于大多数数据库访问程序都需要的库。System.Data.OleDb 将用在访问Access所需要的OLE DB Provider。如果我们需要使用SQL Server,则我们最好使用定制的SQL Provider 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"
这里只声明了一个String属性,connectionString. 这个变量保存了 Northwind Access数据库的连接字符串。声明这个变量为Shared,说明它是一个“类变量(Class Variable)”,一个class variable是和类关联的,二不是和这个类产生的每个对象相关联。(译者:VB.Net的Shared 修饰符相当于C++或C#的Static修饰符)
在连接字符串的定义之后,你可以看到这里有3个过程和1个函数。函数返回了一个包含所有产品列表的dataset。它调用了在第一部分已经创建的存储过程 procProductsList.
然后你可以看到3个过程。他们对应于每个存储过程,用于增加、删除、修改产品;它们都有类似的结构; 每个使用了一个command,并声明了连接对象和必须的参数。 作为一个例子, 我们来分开讨论ProductsDeleteItem过程。理解了这个过程,其他2个就很容易消化了.
一开始,这个过程使用了一个参数, ProductID, 表示需要删除的产品的ID。
Sub ProductsDeleteItem(ByVal ProductID As Integer)
接着,声明了所有的变量. 分别用于存储过程将要使用的connection,command和parameter. 这个参数就是需要删除的那格产品ID.
Dim con As OleDbConnection
Dim cmd As OleDbCommand = New OleDbCommand()