不知道.net里面有没有CAdo
好像有的
好像有的
解决方案 »
- 拷过来的VC的工程 没有rc文件 怎么办
- 100分 求如何能获取到DirectUI窗口中的控件句柄啊
- mysql 数据库没有备份 数据还能还原吗? 急!急!急!
- 创建套接字语句不能F5调试运行,这是为什么呀
- 一个win程序 怎么搞都还是过不去
- 提个菜问题:怎么样将字符串型的控件变量转换为整型?知道的请告诉一声啊!在线等着,一解决就给分啦!
- 急:怎样在VC中操作.wrl文件
- 那位来帮帮我啊?
- 在VC6中有时使用一个结构变量或指针时,VC不能自动显示出(.)操作符或(->)操作符后的结构成员,为什么?怎样使它显示出来!
- 妹子求MFC大神帮忙画个曲线
- 关于绘图仪的驱动程序
- 一个小问题 void CEx04aView::OnDraw(CDC* pDC)的CDC是什么?谢谢!!
有区别吗?
望高手指点
只不过#import是最好用的,其他比较好的还有:
1、Smart point方法,com_ptr_t
2、用MFC OLE创建ADO应用MFC OLE类似于#import,能够对一个类型库产生一个封装(wrapper),但是不象#import,MFC OLE不能够从类型库中产生枚举类型,但是它能够更干净的实现ADO。MFC类CString和COleVariant隐藏了BSTRS和Variants的细节。需要注意的是,有MFC OLE产生的类封装都是继承了类ColeDispatchDriver,由ADO产生的失败的HRESULTS被封装在类ColeDispatchException中。 首先我们需要说明一下用MFC OLE ClassWizard创建ADO应用的几个不可缺少的步骤: 从Tools菜单中,选择Options,然后选择Directories tab,在Show Directories中,选择Library Files,然后在directories增加路径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应用的代码: AfxOleInit(); file://初始化COM对象 ... _Recordset Rs1; file://定义数据集对象 COleException e;
COleVariant Connect( "DSN=AdoDemo;UID=sa;PWD=;" ); COleVariant Source ( "SELECT * FROM Authors" ); file://创建数据集对象 Rs1.CreateDispatch( "ADODB.Recordset.2.0", &e ); Rs1.Open( (VARIANT) Source, (VARIANT) Connect, 0, 1, -1 ); file://这里可以对结果集Rs1进行处理 Rs1.Close(); Rs1.ReleaseDispatch(); AfxMessageBox("Success!"); #import和MFC OLE都围绕着一个给定的自动化对象产生了一个封装类,它们分别继承自_com_ptr_t和ColeDispatchDriver。但是事实上,你可以通过使用Windows API函数直接初始化ADO对象,下面讨论直接用Win32 API函数来操作COM对象。3、用COM API创建ADO应用为了直接使用ADO和COM对象,需要添加两个头文件adoid.h和adoint.h,这两个头文件定义了CLSIDs,接口定义和你操作ADO类型库所需要的枚举类型。同时你也需要增加头文件INITGUID.H。 为了能够编译用COM API创建的ADO工程文件,你需要安装OLE DB SDK或者是MSDASDK工具。下面是简单的示例代码: #include #include #include "adoid.h" // ADO的GUID's #include "adoint.h" // ADO的类、枚举等等 void main() { HRESULT hr = S_OK; ADORecordset* Rs1 = NULL; // ADORecordset 是在adoint.h中定义的 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 ); file://这里你可以对记录集Rs1进行处理 if( SUCCEEDED( hr ) ) hr = Rs1->Close(); if( SUCCEEDED( hr ) ) { Rs1->Release(); Rs1 = NULL; } if( SUCCEEDED( hr ) ) ::MessageBox( NULL, "Success!", "", MB_OK ); }