背景
最近又再重新学习vb,老师说过无论学习什么知识一定不能独立的学习,学习编程语言也是一样,把两种或者三种语言放到一起进行比较,通过比较每种语言的语法和结构,可以更好地理解它们之间的异同。这有助于扩展编程思维和理解编程范式的多样性,最重要的是在比较的过程中,发挥创造力把不同看成相同,学习就会事半功倍。今天主要介绍几个数据库访问和组件技术相关的概念。
我们在vb中接触最多的就是组件和控件,控件一般是指ActiveX控件,组件主要指ActiveX动态链接库和ActiveX.exe。组件和控件应用非常广泛,提高了开发效率。vb下面有两套数据存储模型,一个是DAO(早期模型,渐渐淘汰了),一个是ADO,采用的是ActiveX技术,采用二进制标准,具有跨平台的性质,下面就先从ADO开始进行一下介绍:
概念
ADO
ADO(ActiveX Data Objects)是一组用于访问和处理数据的组件和对象模型。它是Microsoft提供的一种数据访问技术,用于在应用程序中连接到数据库、执行查询、检索和更新数据等操作。
ADO提供了一种统一的编程接口,使开发人员能够以一致的方式与不同类型的数据源进行交互,包括关系型数据库(如SQL Server、Oracle、MySQL等)、文本文件、Excel表格等。
核心组件
- Connection对象:用于建立与数据源的连接,并管理连接的打开和关闭。 在数据库应用里操作数据源都必须通过该对象,这是数据交换的环境。Connection对象代表了同数据源的一个会话,在客户/服务器模型里,这个会话相当于同服务器的一次网络连接。
- Command对象:用于执行SQL语句或存储过程,并处理查询结果。是一个对数据源执行命令的定义,使用该对象可以查询数据库并返回一个Recordset对象,可以执行一个批量的数据操作,可以操作数据库的结构。
- Recordset对象:用于表示从数据源中检索的结果集,可以对结果集进行浏览、修改和更新。
代码展示
- 引入ADO库:在VB项目中,你需要引入ADO库,以便使用ADO相关的组件和对象。可以通过在项目中添加对"Microsoft ActiveX Data Objects"的引用来实现。
- 创建连接对象:使用ADO的Connection对象来建立与数据库的连接。可以指定数据库的连接字符串,其中包括数据库的类型、位置、用户名、密码等信息。
Dim conn As New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=myServerAddress;Initial Catalog=myDatabase;User ID=sa;Password=123456;"
conn.Open
- 执行查询语句:使用ADO的Command对象来执行数据库查询语句。你可以编写SQL语句或调用存储过程来查询和操作数据库。
Dim cmd As New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM Students"
Dim rs As ADODB.Recordset
Set rs = cmd.Execute
- 处理查询结果:查询结果会返回一个Recordset对象,可以使用它来遍历和操作查询结果集。
While Not rs.EOF
' 处理每一条记录
MsgBox rs("StudentName").Value
rs.MoveNext
Wend
- 关闭连接:在完成数据库操作后,关闭连接,释放资源。
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
通过以上步骤,可以使用ADO在VB中连接数据库、执行查询语句,并处理查询结果.
概念中的概念
现在回看一下ADO概念中的几个名词,分别进一步介绍
ActiveX
ADO中的A就是指ActiveX ,那这又是什么呢?
ActiveX是"Active eXtension"的缩写,它是一种基于COM(Component Object Model)的技术。ActiveX是Microsoft提出的一种软件组件技术,用于创建可重用的软件组件,可以在不同的应用程序和平台之间进行交互和共享。
ActiveX技术的目标是实现跨平台、跨语言和跨网络的组件通信。它提供了一种标准的组件模型,使开发人员可以创建和使用可重用的软件组件。这些组件可以以二进制形式存在,被其他应用程序调用和使用,从而实现代码的重用和模块化。
ActiveX技术主要应用于Windows平台,并且在Web浏览器中也有广泛的应用。在Web浏览器中,ActiveX控件可以嵌入到网页中,实现丰富的交互和功能扩展,但需要用户的授权和浏览器的支持。
说到这里插入一点“历史”,关于静态库(Static Library)、动态链接库(Dynamic Link Library,DLL)和ActiveX。这三种是常见的代码共享方式,使得多个应用程序可以共享同一份代码,减少代码冗余和提高代码复用性。
静态库是最早出现的,DLL是在静态库的基础上发展而来,ActiveX是基于COM和OLE技术的一种特殊的DLL。它们的演化过程是为了解决代码共享和软件更新的需求,并提供更灵活和易于维护的方式。
三者不同点见下表
特点 | 静态库 | DLL | ActiveX |
---|---|---|---|
文件类型 | .lib | .dll | .dll |
链接方式 | 静态链接 | 动态链接 | 动态链接 |
内存占用 | 静态库的代码被复制到可执行文件中 | 共享代码段,多个进程共享同一份代码 | 共享代码段,多个进程共享同一份代码 |
可执行文件大小 | 较大 | 较小 | 较小 |
更新方式 | 需要重新编译整个程序 | 只需替换DLL文件 | 只需替换DLL文件 |
运行时依赖 | 不依赖外部库文件 | 需要依赖DLL文件 | 需要依赖DLL文件 |
跨平台性 | 不具备 | 具备 | 具备 |
使用场景 | 静态链接时,适用于小型项目 | 动态链接时,适用于大型项目 | 适用于跨平台和分布式系统 |
总结起来,ActiveX是一种基于COM的技术,用于创建可重用的软件组件,可以在不同的应用程序和平台之间进行交互和共享。它提供了一种标准的组件模型,用于实现代码的重用和功能的扩展。
组件
指的是可重用的软件模块,可以被其他程序调用和使用。
组件在VB中通常以类库(Library)的形式存在,可以包含多个类、接口和函数等。ADO提供了一组组件,用于在VB应用程序中进行数据库访问和数据处理。
在上面给的代码中,ADODB.Connection和ADODB.Recordset就是ADO组件的一部分。通过创建这些组件的实例,并调用相应的方法和属性,可以实现与数据库的交互和数据操作。
对象模型
指的是一组对象的层次结构,这些对象代表了不同的数据库相关组件和功能。这些对象之间存在关联和依赖关系,通过调用对象的方法和属性,可以实现对数据库的连接、查询、更新等操作。
上面提到的 Connection、 Command、 Recordset以及 Field(字段对象:表示记录集中的一个字段,可以获取和设置字段的值 )都是ADO的对象模型中的核心对象,除了这些核心对象,还有其他辅助对象和集合对象,用于支持数据访问和处理的各种功能。
对象模型提供了一种结构化的方式来组织和管理这些功能,使得在VB中进行数据库编程更加方便和灵活。开发人员可以根据需要创建和配置这些对象,以实现特定的数据库操作。
ADO与ODBC的关系
ODBC(Open Database Connectivity)是一种开放的标准API,用于在应用程序和数据库之间建立连接和进行数据交互。它提供了一组函数和驱动程序,使应用程序能够通过统一的方式访问不同类型的数据库。ODBC允许应用程序使用SQL语句来查询和操作数据库,并提供了一种独立于数据库的编程接口。
ADO是建立在ODBC之上的一种高级数据访问技术。ADO提供了一个对象模型,使开发人员可以以更简洁和直观的方式与数据库进行交互。ADO可以使用ODBC驱动程序来连接和访问数据库,通过ODBC提供的功能,ADO可以与各种不同的数据库进行通信。
在ADO中,可以使用ADO的Connection对象来建立与数据库的连接,而连接字符串中可以指定使用的ODBC数据源。通过这种方式,ADO利用了ODBC的功能来实现与不同数据库的通用数据访问。
需要注意的是,尽管ADO可以使用ODBC来连接数据库,但它也支持其他的数据访问方式,如使用本地驱动程序、OLE DB提供程序等。这使得ADO具有更大的灵活性和可扩展性,可以适应不同的数据访问需求。
总结
本文介绍了数据库访问和组件技术相关的概念,从ADO作为起点展开,介绍了ADO作为一组用于访问和处理数据的组件和对象模型,在VB中的应用。接着介绍了ActiveX的前身静态库和动态链接库(DLL),它们都是常见的代码复用和模块化的方式。同时,介绍了组件和对象模型的概念,ActiveX组件以DLL的形式存在,通过使用ActiveX技术,组件可以更加灵活地被调用和使用,实现跨平台、跨语言和跨网络的组件通信。最后,提到了ADO与ODBC的关系。通过介绍ActiveX、组件、对象模型、静态库、动态链接库(DLL)以及ADO与ODBC的关系,展示了数据库访问和组件技术的发展和应用。这些概念和技术为开发人员提供了强大的工具和平台,用于构建可重用、灵活和高效的软件系统。