论文部分内容阅读
通过ODBC 管理器可以增添、修改或删除数据源,也可以增添、删除ODBC驱动程序,ODBC管理器把数据源和它们的连接信息保存在ODBC. INI、ODBCINST. INI和ODBCISAM.INI中。当需要共享应用程序时,只需按新的数据文件的类型和位置重新登录即可。
1. ODBC应用程序接口
ODBC API是一组标准的ODBC函数库,除了一般的数据库操作函数外,还包括一组函数(如SQLExec或SQLEx- ecdlrect)能够内嵌标准SQL查询语句。SQL(StructuredQuery Language,结构化查询语言)是一种存取关系型数据库的标准语言,能够定义、查询、修改和控制数据,简单的语句能够作用于整个数据表格,具有很强的功能。API 函数按功能可分为以下几类(顺序也表示了进行数据库操作的顺序):
(1)数据源连接函数,设置/获取有关信息的函数;
(2)准备/提交执行SQL查询语句的函数和获得数据的函数;
(3)终止函数和异常处理函数。
有两个问题需要特别说明:一是数据类型问题,数据源中的数据所具有的数据类型称为SQL数据类型,不一定和ODBCSQL数据类型存储方式一致,驱动程序把这些数据类型同ODBCSQL数据类型进行相互转换;二是函数的调用级别问题,并不是每一个ODBC驱动程序都支持所有的ODBC API函数调用。
2.ODBC应用编程
在Visual C++中,MFC(Microsoft Foundation Class)为ODBC预定义了几个类,其中主要的是数据库类和记录集合类。CDatabase的每一个对象代表了一个数据源的连接,CRecordset的每一个对象代表了从一个数据表中按预定的查询条件获得的记录的集合,一般说来,前者适宜于对数据源下的某个数据表格进行整体操作,后者用于对所选的记录集合进行处理。
在应用编程时,一般使用CDatabase和CRecordset的派生类。假设派生类分别为CUserdb和CUserset,而在应用类CUserClass中,使用了一个CUserdb对象(m-db)和一个Cuserset对象。
2.1m-db连接数据源
m-db在完成定义构造后,要调用 CDatabase的打开(Open)函数以进行数据源的实际连接:
m-db.Open(lpszDSN,bExclusive,bReadOnly,lpsz-Connect)
打开函数需要输入四个参数。lpszDSN:要连接的数据源的名字,如果 IpszDSN = NULL且 lpszConnect 中也没有指明数据源名,则该调用会自动出现一个对话框列出所有可用的数据源(名),让用户选择。bExclusive:只支持“假”(False)值,表示为共享(share)方式连接。ReadOnly:指明数据源操作方式是“只读”还是可以修改。lpszConnect:指明连接字符串,包括数据源名、用户标识码、口令等信息。该字符串必须以“ODBC;”开头,表示该连接是与一个ODBC数据源的连接(考虑以后版本支持非ODBC数据源)。
2.2m-db操作数据
数据源打开后,即可对数据库文件中的数据表格进行操作,操作以调用SQL语句方式进行,可直接通过ODBC API函数,或者CDatabase类成员函数ExecuteSQL。数据表名在SQL 语句中指定,如下语句则在所在的数据源中的 clerk 表中插入一个记录,记录的name字段值为“chen”。
m-db.ExecuteSQL("insert into clerk (name) value('chent')")
2.3m-recset操作数据
记录集合生成后,其当前记录的各字段值被保存在前述的各字段变量中,如果调用CRecordset的滚动函数,如MoveFirst,MoveNext,MovePrev,MoveLast等,字段变量的值将自动跟随“当前”记录的位置的变化而变化。IsBOF,IsEOF用于判别是否移动到记录的头或尾。对于AddNew和Edit,修改字段变量后一定要调用函数Update,否则更新将丢失;而Delete操作则不必进行字段值修改和调用Update。在多用户系统使用时,每一个数据源可以被多个用户的多个任务连接,不同的任务可同时修改相同的数据源。ODBC 提供了两种数据表更新的同步机制(在m-recset.Open函数中指定),“静态”的和动态的。前者是一组静态的记录集合,当建立后不会改变,除了反映自己的添加/删除外,不反映别的用户的修改,除非调用了Requery重新建立。后者是一组动态的记录集合,自己或别的用户所作的修改随时反映到集合中来(当然也可用Requery重建),以保持记录与数据源的同步。
3.总结
从以上讨论可以看出,ODBC应用接口十分简便!再加上Visual C++ 中的AppWizard和ClassWizard自动生成框架代码功能,连接一个数据源,生成一个CRecordset对象,就更快捷了。应用程序只需关心数据的处理而不必费心数据的存取,另外,另一个与ODBC有关的类CRecordView,是一个窗口类CWnd的派生类,建立在CRecordset上,可直接构造数据库记录显示窗口,某些情况下也不妨一用。
1. ODBC应用程序接口
ODBC API是一组标准的ODBC函数库,除了一般的数据库操作函数外,还包括一组函数(如SQLExec或SQLEx- ecdlrect)能够内嵌标准SQL查询语句。SQL(StructuredQuery Language,结构化查询语言)是一种存取关系型数据库的标准语言,能够定义、查询、修改和控制数据,简单的语句能够作用于整个数据表格,具有很强的功能。API 函数按功能可分为以下几类(顺序也表示了进行数据库操作的顺序):
(1)数据源连接函数,设置/获取有关信息的函数;
(2)准备/提交执行SQL查询语句的函数和获得数据的函数;
(3)终止函数和异常处理函数。
有两个问题需要特别说明:一是数据类型问题,数据源中的数据所具有的数据类型称为SQL数据类型,不一定和ODBCSQL数据类型存储方式一致,驱动程序把这些数据类型同ODBCSQL数据类型进行相互转换;二是函数的调用级别问题,并不是每一个ODBC驱动程序都支持所有的ODBC API函数调用。
2.ODBC应用编程
在Visual C++中,MFC(Microsoft Foundation Class)为ODBC预定义了几个类,其中主要的是数据库类和记录集合类。CDatabase的每一个对象代表了一个数据源的连接,CRecordset的每一个对象代表了从一个数据表中按预定的查询条件获得的记录的集合,一般说来,前者适宜于对数据源下的某个数据表格进行整体操作,后者用于对所选的记录集合进行处理。
在应用编程时,一般使用CDatabase和CRecordset的派生类。假设派生类分别为CUserdb和CUserset,而在应用类CUserClass中,使用了一个CUserdb对象(m-db)和一个Cuserset对象。
2.1m-db连接数据源
m-db在完成定义构造后,要调用 CDatabase的打开(Open)函数以进行数据源的实际连接:
m-db.Open(lpszDSN,bExclusive,bReadOnly,lpsz-Connect)
打开函数需要输入四个参数。lpszDSN:要连接的数据源的名字,如果 IpszDSN = NULL且 lpszConnect 中也没有指明数据源名,则该调用会自动出现一个对话框列出所有可用的数据源(名),让用户选择。bExclusive:只支持“假”(False)值,表示为共享(share)方式连接。ReadOnly:指明数据源操作方式是“只读”还是可以修改。lpszConnect:指明连接字符串,包括数据源名、用户标识码、口令等信息。该字符串必须以“ODBC;”开头,表示该连接是与一个ODBC数据源的连接(考虑以后版本支持非ODBC数据源)。
2.2m-db操作数据
数据源打开后,即可对数据库文件中的数据表格进行操作,操作以调用SQL语句方式进行,可直接通过ODBC API函数,或者CDatabase类成员函数ExecuteSQL。数据表名在SQL 语句中指定,如下语句则在所在的数据源中的 clerk 表中插入一个记录,记录的name字段值为“chen”。
m-db.ExecuteSQL("insert into clerk (name) value('chent')")
2.3m-recset操作数据
记录集合生成后,其当前记录的各字段值被保存在前述的各字段变量中,如果调用CRecordset的滚动函数,如MoveFirst,MoveNext,MovePrev,MoveLast等,字段变量的值将自动跟随“当前”记录的位置的变化而变化。IsBOF,IsEOF用于判别是否移动到记录的头或尾。对于AddNew和Edit,修改字段变量后一定要调用函数Update,否则更新将丢失;而Delete操作则不必进行字段值修改和调用Update。在多用户系统使用时,每一个数据源可以被多个用户的多个任务连接,不同的任务可同时修改相同的数据源。ODBC 提供了两种数据表更新的同步机制(在m-recset.Open函数中指定),“静态”的和动态的。前者是一组静态的记录集合,当建立后不会改变,除了反映自己的添加/删除外,不反映别的用户的修改,除非调用了Requery重新建立。后者是一组动态的记录集合,自己或别的用户所作的修改随时反映到集合中来(当然也可用Requery重建),以保持记录与数据源的同步。
3.总结
从以上讨论可以看出,ODBC应用接口十分简便!再加上Visual C++ 中的AppWizard和ClassWizard自动生成框架代码功能,连接一个数据源,生成一个CRecordset对象,就更快捷了。应用程序只需关心数据的处理而不必费心数据的存取,另外,另一个与ODBC有关的类CRecordView,是一个窗口类CWnd的派生类,建立在CRecordset上,可直接构造数据库记录显示窗口,某些情况下也不妨一用。