VC中基于ADO访问数据库
来源:互联网 发布:linux查看检测网络命令 编辑:程序博客网 时间:2024/04/20 13:18
前提知识:
OLE DB是基于COM库技术编写的,ADO是基于OLE DB的,它实际上是OLE DB的用户程序,ADO本身也是一个COM组件,COM组件在使用时,需要初始化COM库
基于ADO访问数据库主要用到三个核心对象:Connection对象、Command对象、Recordset对象
Connection : 该对象表示到数据库的连接,它管理应用程序和数据库之间的通信。
Recordset 和 Command 对象都有一个 ActiveConnection 属性,该属性用来引用 Connection 对象。
Command : 该对象用来处理重复执行的查询,或处理需要检查在存储过程中调用的输出或返回参数的值的查询。
Recordset : 该对象用来获取数据。Recordset 对象存放查询的结果,这些结果由数据的行和列组成。
ADO对象是由 msado15.dll 动态库提供的,所以在VC中利用ADO访问数据库时,先需要导入ADO库,如下:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "rsEOF")
上述代码用使用 no_namespace 关键字,意为不使用命名空间,主要是为了访问方便,在程序中可以直接访问ADO提供的 Connection、Command 和 Recordset 这三个COM接口
EOF表示记录集的结尾,由于文件也是以EOF结尾的,为避免冲突,在导入ADO库时,需要将EOF重命名。
注:在VC中利用ADO访问数据库时都会存在警告提示,对程序没有影响
警告:d:\ado\debug\msado15.tlh(407) : warning C4146 : unary minus operator applied to unsigned type, result still unsigned
void QuerySql(){ CoInitialize(NULL); //调用CoInitialize函数来初始化COM库 _ConnectionPtr pConnection(__uuidof(Connection)); _RecordsetPtr pRecordset(__uuidof(Recordset)) pConnection->ConnectionString="Provider=SQLOLEDB.1; Password=sa; Persist Security Info=True; User=sa; Initial Catalog=pubs"; pConnection->Open("", "", "", adConnectUnspecified); pRecordset=pConnection->Execute("SELECT * FROM 表名", NULL, adCmdText); while(!pRecordset->rsEOF) { std::cout<<(_bstr_t)pRecordset->GetCollect("au_lname"); pRecordset->MoveNext(); } pRecordset->Close(); pConnection->Close(); pRecordset->Release(); pConnection->Release(); CoUninitialize(); //调用CoUninitialize函数卸载COM库}
上述代码中 _ConnectionPtr 类型是一个智能指针,在msado15.tlh文件中可看到该类型的定义:
_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));
_COM_SMARTPTR_TYPEDEF 宏定义了 _ConnectionPtr 智能指针类型,允许用户访问 ADO Connection 对象
利用这个智能指针类定义ADO Connection对象: pConnection,使用关键字 __uuidof 获取 ADO Connection 接口的全局唯一标识符(GUID),对pConnection 对象进行初始 化。
利用记录集智能指针对象:pRecordset 来访问属性和方法。
调用Open方法打开与数据库的连接, 在VC中Open函数的定义可在msado15.tli文件中可看到:
inline HRESULT _Connection15::Open( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options);
ConnectionString 为连接字符串
类型 _bstr_t 是一个COM支持类,封装了BSTR数据类型, _bstr_t 类型的一种构造函数定义为:
_bstr_t( const char* s2) throw ( _com_error );
下面是利用Command智能指针对象来访问数据库
void QuerySql(){ CoInitialize(NULL); _ConnectionPtr pConnection(__uuidof(Connection)); _RecordsetPtr pRecordset(__uuidof(Recordset)); _CommandPtr pCommand(__uuidof(Command)); pConnection->ConnectionString="Provider=SQLOLEDB.1; Password=sa; Persist Security Info=True; User ID = sa; Initial Catalog=pubs"; pConnection->Open("", "", "", adConnectUnspecified); pCommand->put_ActiveConnection(_variant_t((IDispatch*)pConnection)); pCommand->CommandText="SELECT * FROM 表名"; pRecordset=pCommand->Execute(NULL, NULL, adCmdText); while(!pRecordset->rsEOF) { std::cout<<(_bstr_t)pRecordset->GetCollect("au_lname"); pRecordset->MoveNext(); } pRecordset->Close(); pConnection->Close(); pCommand->Release(); pRecordset->Release(); pConnection->Release(); CoUninitialize();}
- VC中基于ADO访问数据库
- vc 中 ado 访问数据库
- VC++中 ado 访问mdb数据库
- vc 访问数据库ADO
- VB中基于ADO的数据库访问
- Vc调用ado访问数据库
- VC++ ADO访问数据库笔记
- VC用ADO访问数据库
- VC用ADO访问数据库
- VC用ADO访问数据库
- VC用ADO访问数据库
- vc下ADO访问数据库
- VC用ADO访问数据库
- VC利用ADO访问数据库
- 在VC++.NET中使用ADO访问数据库
- VC中调用ADO对象访问数据库的范例
- 在VC++.NET中使用ADO访问数据库
- VC中利用ADO访问数据库的一个简单实例
- html5之拖放简单效果
- Javascript/Jquery——简单定时器
- IO流处理
- 拼出漂亮的表格 JS大牛巨作。
- Linux的自动执行程序cron和crontab
- VC中基于ADO访问数据库
- java myeclipse怎么往main方法传参数啊
- 复合数据对象
- java for循环的几种写法
- 使用apache daemon让java程序在unix系统上以服务方式运行
- jQuery 选择器
- 页面爬虫(获取其他页面HTML)加载到自己页面
- Android Layout之一:FrameLayout
- 电话号码的快速查找