您的位置:首页 > 编程语言 > C语言/C++

c++访问数据库方法

2015-08-31 01:35 417 查看
C++连接数据库的方法:

前段时间写程序,需要用到C++连接访问数据库,询问了好多同学都是模棱两可。所以只好自己去琢磨:learn by doing.
在这儿写出来,一是为了自己总结,二是大家需要此类时可直接搬过去用,不用再费劲绕弯路了。
数据库连接有多种方式,通过学习得知有几种方法,但还没时间亲自实验:

1.使用纯C++实现,通过db-libaray·

2.通过托管c++直接使用.netframework

3.使用OTL类库,简单例子参考: http://otl.sourceforge.net/otl4_examples.ziphttp://otl.sourceforge.net/otl3_down.htm

4.使用Ado,ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层 ,甚至比以往所接触的ODBC API、DAO、RDO都要容易使用
ADO使用步骤方法:

(1)初始化COM库,引入ADO库定义文件

(2)用Connection对象连接数据库

(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。

(4)使用完毕后关闭连接释放对象。
//下面的import语句就是引入ADO库定义文件,有的环境下需要将\改为\\
//编译的时候系统会生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")

class ADOConn

{

public:

::_ConnectionPtr m_pConnection;

::_RecordsetPtr m_pRecordset;
public:

ADOConn(void);

//初始化-连接数据库

void OnInitADOConn();

//执行查询,返回结果集

::_RecordsetPtr & GetRecordSet(_bstr_t bstrSQL);

//执行sql语句,更新数据库

bool ExecuteSQL(_bstr_t bstrSQL);

void ExitConnect();

};

void ADOConn::OnInitADOConn()

{

::CoInitialize(NULL);// 初始化OLE/COM库环境 ,为访问ADO接口做准备

//AfxOleInit();//used in MFC

HRESULT hr;

try

{

hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象

//_bstr_t strConnect="driver=sql server;server=(local);Provide=SQLOLEDB;Data Source=SHL;Initial Catalog=CutwordSet;User ID=;Password=;";

_bstr_t strConnect="driver={sql server};server=(local);uid=;pwd=;database=CutwordSet";

hr = m_pConnection->Open( strConnect,"", "", adModeUnknown);

if(SUCCEEDED(hr))

cout<<endl;

//cout<<"连接数据库sucess"<<endl;

}

catch(_com_error e)///捕捉异常

{

//CString errormessage;

//errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());

//AfxMessageBox(errormessage);///显示错误信息

cout<<"连接数据库失败!\r\n错误信息:"<<e.Description()<<endl;

}

}
_RecordsetPtr & ADOConn::GetRecordSet(_bstr_t bstrSQL)

{

try

{

//连接数据库,如果connection对象为空,则重新连接数据库

if(m_pConnection==NULL)

OnInitADOConn();

//创建记录集对象

m_pRecordset.CreateInstance(_uuidof(Recordset));

m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

}

catch(_com_error e)

{

cout<<e.Description()<<endl;

}

//返回记录集

return m_pRecordset;

}

bool ADOConn::ExecuteSQL(_bstr_t bstrSQL)

{

try

{

//是否已经连接数据库

if(m_pConnection ==NULL)

OnInitADOConn();

m_pConnection->Execute(bstrSQL,NULL,adCmdText);

return true;

}

catch(_com_error e)

{

//AfxMessageBox(e.Description());

cout<<e.Description()<<endl;

return false;

}

}

void ADOConn::ExitConnect()

{

//关闭记录集和连接

if(m_pRecordset !=NULL)

m_pRecordset->Close();

m_pConnection->Close();

//释放环境

::CoUninitialize();//关闭ole/com库,释放资源

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: