如何使用ADO连接DB2数据库?
目录
1. ADO介绍 (2)
2. 使用ADO需要注意什么? (3)
2.1.初始化OLE/COM库环境 (3)
2.2.引入ADO库文件 (3)
2.3.初始化智能指针 (4)
2.4.获取错误信息 (4)
3. 使用_RecordsetPtr指针来操作数据库 (5)
3.1.增加数据 (5)
3.2.查询数据 (6)
3.3.修改数据 (7)
3.4.删除数据 (7)
3.5.综合实例 (7)
4. 使用_CommandPtr指针操作DB2数据库 (9)
4.1.增加数据 (9)
4.2.修改数据 (10)
4.3.删除数据 (10)
5. 二进制数据类型的处理 (10)
5.1.添加二进制字段数据 (11)
5.1.1.使用_ParameterPtr指针 (12)
5.1.2.使用SafeArray 数组 (12)
5.2.查询二进制字段数据 (13)
5.3.修改二进制字段数据 (13)
5.4.置空二进制字段数据 (13)
附录 (14)
引言
ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据,是基于OLE技术的通用数据库接口。
DB2是IBM基于JAVA开发的一款通用数据库软件。由于DB2数据库对ADO的支持性不完善,所以有很多问题需要注意。
1.ADO介绍
一、了解ADO的结构体系
ADO(ActiveX Data Object, Active 数据对象)是Microsoft提供的一种面向对象,与语言无关的数据访
问应用编程接口。据大部分资料介绍,它有如下主要特点:一:易于使用。
二:可以访问多种数据源。
三:访问速度快,效率高:
四:方便Web应用。
五:技术编程接口丰富。
六:低内存支出和占用磁盘空间较少.
正是看到ADO这么多优点,使我对用ADO开发数据库产生了兴趣.ADO用起来也如前面所说的一样,确实不难。总的来说,ADO模型包括了下列对象:连接(Connection)、命令(Command)、记录集(Recordset)、字段(Field)、参数(Parameter)、错误(Error)、属性(Property)、集合、事件.它们之间的关系如下图:
(2)对于访问一个数据库来说,我们一般先建立一个ADO连接.
(3)ADO连接可以直接执行SQL语句来操纵数据库,但如果我们要对数据在应用程序和数据源之间进行存取的话,就需要用到记录集对象。一个ADO连接可以有多个ADO连接,
但一个ADO连接一般只能对应一个且必须对应一个ADO连接.
(4)另外如果你可进行更高级别的访问的话,还可能要用到命令对象。例如要调用存储过程等。
(5)一个记录集包含有一个字段集,一个字段集则包含有多个字段对象。
(6)同样一个命令对象也包含一个参数集,一个参数集则包含有多个参数对象。
(7)连接对象也有一个错误集并包含有多个错误对象。
2.使用ADO需要注意什么?
ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。
_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。
_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。
2.1. 初始化OLE/COM库环境
因为ADO是以OLE技术为基础的,需要进行初始化,可以通过AfxOleInit();方法来实现。
2.2. 引入ADO库文件
使用ADO前必须在工程的stdafx.件里引入ADO库文件,以使编译器能正确编译。代码如下:
#import "c:\program files\common files\system\ado\msado15.dll"
no_namespace
rename ("EOF","adoEOF")
2.3. 初始化智能指针
使用智能指针之前一定要对指针进行初始化,如:
_ConnectionPtr m_pConnection=NULL;
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("DSN=ADOTest","","",0); //连接ODBC数据源"ADOTest"。
_RecordsetPtr m_pRecordset=NULL;
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset->Open("SELECT * FROM BlockDefine",(IDispatch*)m_pConnection,
adOpenDynamic,
adLockOptimistic,
adCmdText); //执行SQL语句得到一个记录集
2.4. 获取错误信息
编写一个程序,调试是很重要的部分,COM接口提供了_com_error 的错误类,利用它,我们可以得到ADO出现异常的原因。可以专门写一个函数来显示错误信息如下:inline int DisplayError( _com_error& e) //作为内联函数提高效率
{
CString msgText;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
msgText.Format("An Error Occured\nADO Error Code = %08lx\n", e.Error()); //错误代码
msgText += " Msg: ";
msgText += e.ErrorMessage(); //错误信息
msgText += "\n Source: ";
msgText += bstrSource; //错误来源
msgText += "\n Description: ";
msgText += bstrDescription; //错误描述
return AfxMessageBox(msgText);
}
然后使用try ... ... catch来获取异常
try
{
_ConnectionPtr m_pConnection=NULL;
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("DSN=ADOTest","","",0);
.
.. ... ...
}
catch(_com_error &e)
{
DisplayError(e);
... ... ...
}
3.使用_RecordsetPtr指针来操作数据库
操作之前,假设在SQLServer的ADOTest数据库中有一张名叫"UserManager"的表格,包含四个字段分别是varChar类型的UserName、int类型的UserRank、DataTime类型的AddTime和ModTime。
那么连接数据库可以这样写:
_ConnectionPtr m_pConnection = NULL;
CString strCnn;
strCnn.Format(_T("Provider=SQLOLEDB;Data Source=%s;")
_T("Initial Catalog=ADOTest;User Id=%s;Password=%s;"),
pServerName, pLogoName, pLogoPin);
m_pConnection.CreateInstance(__uuidof(Connection));
update是什么m_pConnection->Open(pStrCnn, _T(""), _T(""), adConnectUnspecified);
现在我们获取到了一个连接到数据的m_pConnection指针。
3.1. 增加数据
通过_RecordsetPtr来增加一条新的记录,首先调用addNew()方法来表明你要增加记录。然后通过RecordsetPtr的Fields来赋值,如:
pRecordset->Fields->GetItem(_T("UserName"))->Value =_T("wy");
由于pRecordset->Fields->GetItem(FieldName)->Value是_variant_t 类型的变量,所以我们在赋值的时候需要注意要使用COM能够识别的数据类型,如:lpcstr.
最后使用Update()方法提交数据。
try
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论