VC访问数据库技术的方法实例
2009-10-20 14:19
459 查看
最常用的数据库访问技术有如下几种 1. ODBC——开放数据库互联 ODBC为使用不同的关系数据库提供了一个统一的程序设计接口。在安装不同的数据库后,需要创建ODBC数据源, 2. DAO——数据访问对象 3. RDO——远程数据对象 4. OLE DB——对象连接与嵌入数据库 5. ADO——ActiveX数据对象 这里我说明我使用的两种方法:ODBC和ADO。 1. ODBC 在安装数据库首先要创建ODBC数据源,使用CDatabase和CRecordset两个MFC的类与数据库建立连接,访问数据库。 1.1 条件 包含头文件:#include <afxdb.h> 声明成员变量:CDatabase m_dbPostGre; 1.2 连接数据库 int nRetVal; nRetVal = m_dbPostGre.OpenEx( _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" ), CDatabase::openReadOnly | CDatabase::noOdbcDialog ); if ( nRetVal ) { AfxMessageBox( _T( "连接数据库成功!" ) ); } 1.3 访问数据 CRecordset recordset( &m_dbPostGre ); CString strSQL = _T( "select * from product" ); recordset.Open( CRecordset::forwardOnly, strSQL, CRecordset::readOnly ); CDBVariant var; while ( !recordset.IsEOF() ) { TAG_PRODUCTINFO tagProductInfo; // ID recordset.GetFieldValue( _T( "ID" ), var ); tagProductInfo.nProductID = var.m_iVal; // Name recordset.GetFieldValue( _T( "Name" ), tagProductInfo.strProductName ); m_vecProductInfo.push_back( tagProductInfo ); recordset.MoveNext(); } recordset.Close(); 2. ADO技术 ActiveX Data Object, ActiveX数据对象。 ADO建立在OLE DB之上,采用ADO技术访问数据库的话,实际的调用过程是:ADO客户程序通过ADO再访问OLE DB提供的程序,这样访问速度就要慢一些。 如果某个关系型数据库没有OLE DB的提供程序,那么可以利用ODBC的OLE DB提供程序去访问ODBC,然后利用ODBC再去访问支持ODBC的数据库。 2.1 条件 l 头文件和动态库的加载 #include <comdef.h> #include <atlbase.h> #pragma warning(disable:4146) #import "C:/Program Files/Common Files/System/ado/msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF") #pragma warning(default:4146) using namespace ADODB; l COM组件的加载 if ( CoInitialize( NULL ) != 0 ) { AfxMessageBox( _T( "初始化Com库失败!" ) ); return FALSE; } l 变量的声明 _ConnectionPtr m_pConnection; 2.2 连接数据库 m_pConnection.CreateInstance( __uuidof(Connection) ); m_pConnection->ConnectionString = _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" ); HRESULT hr = m_pConnection->Open( _T(""), _T(""), _T(""), adConnectUnspecified ); if ( SUCCEEDED( hr ) ) { AfxMessageBox( _T( "连接数据库成功!" ) ); } 2.3 访问数据库 _CommandPtr pCommand(__uuidof(Command)); _RecordsetPtr pRecordset( __uuidof(Recordset) ); CString strSQL = _T( "select * from /"pg_getProductInfo/"()" ); try { pCommand->ActiveConnection=m_pConnection; pCommand->CommandText=_bstr_t(strSQL); pRecordset=pCommand->Execute(NULL,NULL,adCmdText); } catch (_com_error & e) { AfxMessageBox(e.Description()); return ; } _variant_t var; int nRecordNum = pRecordset->GetRecordCount(); while( !pRecordset->GetadoEOF() ) { TAG_PRODUCTINFO tagProductInfo; // ID var = pRecordset->GetCollect( _T( "ID" ) ); tagProductInfo.nProductID= var.intVal; // Name var = pRecordset->GetCollect( _T( "Name" ) ); tagProductInfo.strProductName = (char*)_bstr_t(var); m_vecProductInfo.push_back( tagProductInfo ); pRecordset->MoveNext(); } pRecordset->Close(); pRecordset.Release(); 总结: 现在DAO和RDO这两种技术已经很少使用了,OLE DB和ADO这两种是比较新的技术,OLE DB的功能非常强大,但是他对自动化的支持不是很好。为了更好地支持自动化,微软在OLE DB的基础上开发了ADO,便于像VBScript这样的脚本语言,以及VB,Delphi这样的语言都可以很方便的使用ADO去访问数据库。 上面两种技术对于不同的关系数据库,使用方法都是一样的,不同的就是数据源,名称,密码以及SQL语句的调用方式。 举个例子:以调用存储过程为例 SQLServer2000的调用方法是”{CALL sp_addMember( '%s', '%s', %d )}”,如果不带参数,则没有小括号,如果带参数,字符串的参数需要加单引号。 PostGre的调用方法是” _T( "select /"pg_modifyOneProduct/"( %d, '%s' )"”,“/“是转义字符,因为在PostGre定义存储过程时,如果存储过程名称加上了双引号,那么在调用的时候,就一定要加上双引号,SQL中应该就是这么规定的。还有一个存储过程如果是想返回表中所有记录,那么在调用存储过程的时候就要使用Selece * from 存储过程名。 |
相关文章推荐
- VC访问数据库技术的方法实例(转)
- VC中使用ADO访问数据库技术程序实现方法
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC中使用ADO访问数据库技术程序实现方法
- VC中使用ADO访问数据库技术程序实现方法
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- VC基于ADO技术访问数据库的方法
- VC数据库访问技术之ODBC
- VC数据库访问技术之ADO
- C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- VC下使用ADO数据库访问技术时遇到的问题
- VC++ 访问数据库实例详解图解
- VC技术 (对话框访问控件的方法)
- VC数据库访问技术之DAO
- VC使用ADO技术访问数据库
- 实例:在 javascript 中访问数据库方法
- C#与数据库访问技术之ExecuteNonQuery方法
- C#与数据库访问技术总结(九)之实例
- VC访问数据库技术(以Postgre为例)