ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB、COM不了解也能轻松对付ADO。
ADO
使用步骤方法:
1. 初始化COM库,引入ADO库定义文件
2. 用Connection对象连接数据库
3. 利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理
4. 使用完毕后关闭连接释放对象
开发环境:VS2008、SQL Server2005
工程:Win32控制台应用程序
先创建数据库mysqltest,新建一张表StuMessage,其中包含列ID、StuName、StuSex、StuAge、StuScore
建立Win32控制台应用程序,空项目即可,这里以adotest为例,源文件为adotest.cpp
建立C++类,类名例为CADO。
在ADO.h的#prama once后添加:#import "c:\program files\common files\system\ado\msado15.dll no_namespace rename("EOF", "adoEOF")rename("EOF", "adoEOF")
#include
添加两个变量:_ConnectionPtr m_pConnection
_RecordsetPtr m_pRecordset
添加三个函数:void Connect(void)
void ExitConnect(void)
_RecordsetPtr& GetRecordset(_bstr_t SQL)
在ADO.cpp中将添加的三个函数填满:
void CADO::Connect(void)
{
try{
::CoInitialize(NULL); //初始化COM环境
m_pConnection.CreateInstance(__uuidof(Connection)); //创建连接对象
m_pConnection->ConnectionString="Provider=SQLNCLI.1; Persist Security Info=True; User ID=sa; Password=sa; Initial Catalog=mysqltest; Data Source="; //请将数据库相应ID与Password更改
//连接服务器和数据库
HRESULT hr=m_pConnection->Open("", "", "", 0);
if(hr!=S_OK)
cout<<"Can not connect to the specified database!"<
}
catch(_com_error e){
cout<
}
}
void CADO::ExitConnect(void)
{
if(m_pRecordset!=NULL){
m_pRecordset->Close();
m_pConnection->Close();
}
::CoUninitialize(); //释放环境
}
_RecordsetPtr& ADO::GetRecordset(_bstr_t SQL)
{
m_pRecordset=NULL;
CADO link;
try{
if(m_pConnection==NULL)
Connect();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_bstr_t)SQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
}
catch(_com_error e){
cout<
m_pRecordset=NULL;
return m_pRecordset;
}
return m_pRecordset;
}
主程序adotest.cpp中开头添加:#include "ADO.h"
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")rename("EOF", "adoEOF")
#include
主程序如下:(只是实现了简单的向数据库中写数据)
void main()
{
string sql;
CADO record;
_RecordsetPtr m_pRecordset;
sql="select * from StuMessage";
_bstr_t bstr_t(sql.c_str());
m_pRecordset=record.GetRecordset(bstr_t);
m_pRecordset->AddNew();
m_pRecordset->PutCollect("ID", _variant_t("1"));
m_pRecordset->PutCollect("StuName", _variant_t("edward"));
m_pRecordset->PutCollect("StuSex", _variant_t("m"));
m_pRecordset->PutCollect("StrAge", _variant_t("17"));
m_pRecordset->PutCollect("StrScore", _variant_t("98"));
m_pRecordset->Update();
record.ExitConnect();
}
执行后,你的StuMessage表中会增加一列edward的信息。
成功之前经历了很多错误,故将自己做成功的写出来,与大家交流分享。如果你的数据库始终连接不上(我的之前就是这个问题),你可以看一下你的1433端口打开了没有。如果没有,可以在SQL server的配置工具的配置管理器中点"网络配置"->"协议"->"TCP/IP"->"IP地址"中将TCP端口写1433。至少我这样成功了,可能会解决你连接不上的问题。
最后,希望我写的可以对大家有帮助,祝大家好运!并诚挚感谢Sunny与技术流的帮助,如果没有你们,我什么也写不粗来...