大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> ASP专区 -> ADO编程应用(2)

ADO编程应用(2)

时间: 2021-07-31 作者:daque

底下是一个大略的沿用了#import本领的鉴于ado运用的示例代码: #include <windows.h> #import <msado15.dll> rename(“eof”, “adoeof”) void main() { hresult hr = s_ok; //由于没有在#import中指定no_namespace,以是必需沿用adodb::如许的情势来设置变量典型 adodb::_recordsetptr rs1 = null; //经过odbc创造ado贯穿 _bstr_t connect( “dsn=adodemo;uid=sa;pwd=;” ); _bstr_t source ( “select * from authors” ); coinitialize(); //初始化rs1东西 hr = rs1.createinstance( __uuidof( adodb::recordset ) ); //简略对归来值hr的确定 rs1->open( source, connect, adodb::adopenforwardonly, adodb::adlockreadonly, -1 ); //此处不妨增添对记载集rs1举行操纵的代码 rs1->close(); rs1 = null; ::messagebox( null,“success!”,“”,mb_ok ); couninitialize(); } 2.用mfc ole创造ado运用 mfc ole同样不妨封装(wrapper)一个典型库,然而与#import各别,它不许从典型库中爆发列举典型。mfc类cstring和colevariant湮没了bstrs和variants的详细。由mfc ole爆发的类都接受了类coledispatchdriver,由ado爆发的波折的hresults被封装在类coledispatchexception中。 用mfc ole classwizard创造ado运用的办法如次: ●从tools菜单中,采用options选项中的directories tab条件,在show directories中的library files中减少路途c:\program files\common files\system\ado,树立包括ado典型库的路途。 ●从view菜单中,激活classwizard,点击add class按钮并采用“from a type library...”选项,而后在type library dialog box对话框中,从c:\program files\common files\system\ado中采用文献msado15.dll,在confirm classes对话框中,采用一切列出的类并按ok按钮退出classwizard。如许,classwizard便天生了两个文献msado15.h和msado15.cpp。 底下是实行ado运用的示例代码: //初始化com东西 afxoleinit(); ... //设置数据集东西 _recordset rs1; coleexception e; colevariant connect( “dsn=adodemo;uid=sa;pwd=;” ); colevariant source ( “select * from authors” ); //创造数据集东西 rs1.createdispatch(“adodb.recordset.2.0”,&e ); rs1.open( (variant) source, (variant) connect, 0, 1, -1 ); //此处不妨增添对截止集rs1举行处置的代码 rs1.close(); rs1.releasedispatch(); afxmessagebox(“success!”); 3.用com api创造ado工程 #import和mfc ole都环绕着一个给定的机动化东西爆发了一个封装类,它们辨别接受自_com_ptr_t和coledispatchdriver。本来也不妨经过运用windows api因变量径直初始化ado东西。为了径直运用ado和com东西,须要增添两个儿文献adoid.h和adoint.h,这两个儿文献设置了clsids、接口设置和操纵ado典型库所须要的列举典型。其余,还须要减少头文献initguid.h。 为了不妨编写翻译用com api创造的ado工程文献,还须要在呆板中安置ole db sdk大概是msdasdk东西。底下是运用api创造ado的大略的示例代码: #include <windows.h> #include <initguid.h> #include “adoid.h” // ado的guid's #include “adoint.h” // ado的类、列举之类 void main() { hresult hr = s_ok; // adorecordset 是在adoint.h中设置的 adorecordset* rs1 = null; variant source; variant connect; variantinit( &source ); variantinit( &connect ); source.vt = vt_bstr; source.bstrval = ::sysallocstring( l“select * from authors”); connect.vt = vt_bstr; connect.bstrval = ::sysallocstring( l“dsn=adodemo;uid=sa;pwd=;” ); hr = cocreateinstance( clsid_cadorecordset, null, clsctx_inproc_server, iid_iadorecordset, (lpvoid *) &rs1 ); if( succeeded( hr ) ) hr = rs1->open (source, connect, adopenforwardonly, adlockreadonly, -1 ); //对记载集rs1举行处置 if( succeeded( hr ) ) hr = rs1->close(); if( succeeded( hr ) ) { rs1->release(); rs1 = null; } if( succeeded( hr ) ) ::messagebox( null, “success!”, “”, mb_ok ); } c++ extensions 即使用c++举行ado运用步调开拓,该当运用ado c++ extensions。咱们领会,用vb大概vbscript来操纵ado利害常简单的,然而即使运用c++大概是java,就必需要处置一致variants如许的数据构造以实行和c++数据构造的变换,而这种处置无疑是一切c++开拓职员都很头疼的工作。但即使运用c++ extensions的话,ado就不须要从数据供给者处获得列消息,而是在安排功夫运用开拓职员供给的列消息。以次是一个大略的示例: //创造和简直记载对立应的类 class cauthor : public cadorecordbinding { begin_ado_binding(ccustomrs1) ado_variable_length_entry4(1, advarchar, m_szau_id, sizeof(m_szau_id), false) ado_variable_length_entry4(2, advarchar,m_szau_fname,sizeof(m_szau_fname), false) ado_variable_length_entry4(3, advarchar,m_szau_lname,sizeof(m_szau_lname), false) end_ado_binding() protected: char m_szau_id[12]; char m_szau_fname[21]; char m_szau_lname[41]; }; void fetchauthordata() { cauthor author; //记载集东西 _recordsetptr prs; iadorecordbinding *piadorecordbinding; //获得com东西接口南针 prs.createinstance(__uuidof(recordset)); //获得须要的记载集 prs->open(“select au_id,au_fname,au_lname from employees”,“provider=sqloledb;data source=sureshk1;database=pubs;user id=sa;password=;”, adopenforwardonly, adlockreadonly, adcmdtext); //查问接口iadorecordbinding prs->queryinterface(__uuidof(iadorecordbinding),(lpvoid*)&piadorecordbinding); //绑定东西 piadorecordbinding->bindtorecordset(&author); //获得记载中的关系实质 while (variant_false == prs->eof) { printf(“%s %s %s”, author.m_szau_id, author.m_szau_fname, author.m_szau_lname); prs->movenext(); } //开释东西 piadorecordbinding->release(); }

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.