VC通过ADO连接到ACCESS,SQLSERVER,ORACLE数据库(一)
2016-09-24 19:49
441 查看
一.导入ADO库文件
一般情况下,VC并不支持ADO对象,要在VC中使用ADO接口,需要使用#import命令导入ADO库文件#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("BOF", "adoBOF") rename("EOF", "adoEOF")
二.连接数据库
ADO库常用的接口有_ConnectionPtr接口,_RecordsetPtr接口和_CommandPtr接口,通常使用这三个接口就可以满足基本的数据库操作。本文更关注于代码层级的实现,关于接口的介绍,将在以后详述。bool ConnectToSQL() { ::CoInitialize(NULL); try { m_pConnection.CreateInstance("ADODB.Connection"); /// ACCESS <span style="background-color: rgb(255, 0, 0);">_bstr_t <span style="color:#ff6666;">strConnect </span>= "DRIVER=Microsoft Access Driver (*.mdb);FIL={MS Access};DBQ=D:\\test.mdb;UID=;";</span> m_pConnection->Open(strConnect, "", "", adModeUnknown); if (m_pConnection->State == adStateOpen) { std::cout << "connect to access sql successfully" << std::endl; m_pCommand.CreateInstance("ADODB.Command"); m_pCommand->ActiveConnection = m_pConnection; return true; } return false; } catch (_com_error & e) { std::cout << e.Description() << std::endl; return false; } }
如上的代码块是连接Access数据库的代码,由于是使用的ADO接口,所以只需要讲上述代码标红的代码块替换成连接sql server,oracle的代码块即可。
ORACLE:
_bstr_t strConnect = "Provider=OraOLEDB.Oracle;Password=9999;Persist Security Info=True;\ User ID = sa; Data Source = \"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=\ (PROTOCOL=TCP)(HOST=192.168.1.128)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=myoracle)))\"";SQL SERVER:
_bstr_t strConnect = "Provider=SQLOLEDB.1;Password=5201314;Persist Security Info=True;\ User ID = sa; Initial Catalog = mysystem; Data Source = localhost";
三.数据库操作
因为是使用ADO库进行连接,所以除了连接时进行连接的字符串不同,以及支持的SQL语句稍有不同外,其他的操作并无不同,以下的代码不论是ACCESS,ORACLE,SQL SERVER都适用。查询数据库:
std::vector<std::list<std::string> > QuerySQL(const char * sql_msg) { std::vector <std::list<std::string> > string_list; std::list<std::string> record_set; try { m_pCommand->CommandText = (_bstr_t)sql_msg; m_pRecord = m_pCommand->Execute(NULL, NULL, 0); if (0 == m_pRecord->GetRecordCount()) return string_list; m_pRecord->MoveFirst(); while (!m_pRecord->adoEOF) { for (int index = 0; index != m_pRecord->Fields->GetCount(); index ++) { std::string tmp = (const char *)_bstr_t(m_pRecord->GetCollect(_variant_t(long(index)))); record_set.push_back(tmp); } string_list.push_back(record_set); record_set.clear(); m_pRecord->MoveNext(); } } catch (_com_error & e) { std::cout << e.Description() << std::endl; } return string_list; }
数据库语句支持:
如上所示,数据库的查询功能完全都是利用ADO的接口实现的,同理,也可以利用这些接口实现数据库的增删改,不过同样的,为了简单起见,对于不需要返回查询结果的操作,我们完全可以使用数据库语句来实现,ADO接口也专门开放了执行SQL语句的功能,如下所示:bool ExecuteSQL(const char * sql_msg) { try { m_pCommand->CommandText = (_bstr_t)sql_msg; m_pCommand->Execute(NULL, NULL, 0); return true; } catch (_com_error & e) { std::cout << e.Description() << std::endl; return false; } }
四.关闭数据库连接
</pre><pre name="code" class="cpp">bool CloseSQL() { try { //m_pRecord->Close(); m_pConnection->Close(); if (m_pConnection->State == adStateClosed) { std::cout << "Close SQL successfully" << std::endl; m_pConnection.Release(); m_pRecord.Release(); m_pCommand.Release(); ::CoUninitialize(); return true; } return false; } catch (_com_error & e) { std::cout << e.Description() << std::endl; return false; } }
相关文章推荐
- VC通过ADO连接到ACCESS,SQLSERVER,ORACLE数据库(二)
- 解决小问题--VC2008通过ADO连接ACCESS
- VC++ 通过ADO方式连接SQLServer20XX出现sqlserver 不存在或者拒绝连接错误
- 解决小问题--VC2008通过ADO连接ACCESS (转)
- ADO.NET 连接数据库字符串(Oracle、SqlServer、Access、ODBC)
- VC+ADO 连接ACCESS和SQL SERVER的方法
- VC+ADO 连接ACCESS和SQL SERVER的方法
- ADO.NET 连接数据库字符串(Oracle、SqlServer、Access、ODBC)
- VC使用ADO连接Oracle数据库详解(含源码下载)
- VC连接Oracle数据库之ODBC及ADO
- 配置数据源,VC++ ADO连接ACCESS详解
- ADO.NET 连接数据库字符串(Oracle、SqlServer、Access、ODBC)
- VC编写ADO连接Access,SQL Server数据库入门实例
- ADO的一次开发实践(vc通过ADO连接access数据库做的一个多功能查询系统)
- VC++中使用MFC通过ADO连接数据库方法小结
- VC+ADO 连接ACCESS和SQL SERVER的方法
- VC中ADO连接SQLSERVER的几种标准方式
- VC++下ADO连接ACCESS
- VC中ADO连接SQLSERVER的几种标准方式?
- ADO.NET 连接数据库(Oracle、SqlServer、Access、ODBC)