要使用ADO,必须清楚ADO的对象层次结构,其大体上分为以下7个对象层次:
1、 Command 对象:包含关于某个命令,例如查询字符串、参数定义等的信息。Command 对象在功能上和 RDO的rdoQuery 对象相似。
2、 Connection 对象:包含关于某个数据提供程序的信息。Connection 对象在功能上和 RDO 的 rdoConnection 对象是相似的,并且包含了关于结构描述的信息。它还包含某些 RDOEnvironment 对象的功能,例如transaction 控件。
3、 Error对象:包含数据提供程序出错时的扩展信息。Error 对象在功能上和 RDO 的rdoError 对象相似。
4、 Field 对象:包含记录集中数据的某单个列的信息。Field 对象在功能上和 RDO的rdoColumn 对象相似。
5、 Parameter 对象:包含参数化的Command对象的某单个参数的信息。该 Command对象有一个包含其所有Parameter 对象的 Parameters 集合。Parameter 对象在功能上和 RDO 的 rdoParameter 对象相似。
6、 Property对象:包含某个 ADO 对象的提供程序定义的特征。没有任何等同于该对象的RDO,但DAO有一个相似的对象。
7、Recordset对象:用来存储数据操作返回的记录集。此对象和Connection对象是所有对象最重要的两个对象。
当然,对于初级用户来说,我们只需要掌握其中的Connection对象和RecordSet对象就可以实现基本的数据库操作,在后面的经验介绍里面我将给出详细的介绍。
二. 开发经验小结:
前面总体上介绍了一下当前在VB平台下的数据库访问技术,这些技术也是当前数据库技术的主流。下面笔者结合近几年的开发经验,给出一些开发经验和小技巧,以供参考:
经验一:如果数据量不大,而且要求开发周期短的情况,建议使用DAO+Access虽然DAO功能并不强大,但是其对Jet引擎进行了加速优化处理,所以这种搭配应该是比较好的选择。
经验二:RDO当前已经用的很少了,一般用ADO来替代。
经验三:(本经验很重要)使用ADO开发时,连接数据库的方式有三种(前面已经叙述了),其中DSN需要用户首先使用要将所要操纵的数据库设置为数据库源并给其命名。方法是在控制面板->管理工具->数据源(ODBC)下面进行配置。比如设置的数据源名称为data,那么可以通过下面几行代码来连接数据库:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'连接数据库
conn.Open "dsn=data"
'打开数据源(即选定操作的数据对象)
rs.Open SQL语句, conn
但是如果是使用ODBC和OLEDB的方式进行连接,那么大家一定知道在连接字符串上那一长串的代码,不要说对于初学者,就是对于那些经验丰富的程序员来说,也很难记住这一串代码。那么如何可以记住这一串代码呢?其实,方法很简单,只要添加一个ADO Data控件,然后在其属性框中使用向导进行设置后,那么最后向导就会自动生成一段ConnectionString,只需要将这一行代码拷贝下来然后放到conn.open之后的连接字符串参数的位置上就可以了。这条经验希望读者能够记住,实际开发中很实用。
经验四:前面讲到手动设置ODBC数据源,这里可以通过程序来进行动态设置。首先要清楚的是ODBC的详细信息全部存放在注册表的下述键值内:"HKEY_LOCAL_MACHINE\SOFTWARE\ODBC",通过调用Win32函数WriteProfileString来对相应的键值进行修改即可达到目的。
经验五:通常将数据库的连接代码和资源释放代码放入各自特定的函数里面,因为一般大一点的程序里需要经常对这两个功能模块进行调用,这样做就可以提高效率,当然很多时候都需要写成连接池的形式。
经验六:使用VB在SQL中处理含单引号的字符串时,对字符串数据都用单引号引起来,如:
Select * from MyTable Where ID='FirstID'
若其中的FirstID为First'ID,即中间多出一个单引号,则上述写法将导致错误,解决的办法是将字符串中的每一个单引号用两双引号替换,下面的函数StrToSQL完成该功能,并用单引号将处理后的字符串引起来:
Private Function StrToSQL(ByVal strValue As String) As String
StrToSQL = "'" + Replace(strValue, "'", "''") + "'"
End Function
在写SQL时如有字符串数据,不管其中有没有单引号,都可以这样使用:
strValue="First'Id"
strSQL="Select * from MyTable Where ID="+StrToSQL(strValue)