ADO ( 问数据库数据 的编程 接口)
- ADO (ActiveX Data Objects)
- ADO有三个智能指针:_ConnectionPtr连接对象 、_RecordsetPtr记录集对象、_CommandPtr命令对象
- 先创建SQL记录集,从记录集中提取数据;
- step1:引入ADO类(在 StdAfx.h 中加入)
1 /*忽略ADO的警告*/ 2 #pragma warning(disable: 4146) 3 #pragma warning(disable: 4244) 4 5 /*ADO需要导入的库*/ 6 #import "C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" no_namespace rename("EOF","adoEOF") //有些数据库可能安装在D盘,路径要自己修改
- step2:初始化COM组件
- 在MFC中可以用AfxOleInit();
- 非MFC环境中用:
CoInitialize(NULL);
CoUnInitialize();
1 CTestAdoApp theApp;//创建COM组件,退出COM组件2 ///// 3 //CTestAdoApp initialization 4 5 BOOL CTestAdoApp::InitInstance()6 {7 AfxEnableControlContainer();8 CoInitialize(NULL); //第二步 单线程方式创建COM组件 9 。。。10 }11 ...12 intCTestAdoApp::ExitInstance()13 {14 //TODO: Add your specialized code here and/or call the base class 15 CoUninitialize();//最后一步 ADO COM 释放 16 returnCWinApp::ExitInstance();17 }/
if ( !AfxOleInit() ) {AfxMessageBox( " OLE fail! ");return false;}/
- step3:初始化数据库连接
1 // 2 m_pConn.CreateInstance("ADODB.Connection");3 if(m_pConn==NULL)//CoInitialize£¨NULL£©Î´³õʼ»¯ 4 {5 TRACE("初始化连接对象失败\n");6 returnFALSE;7 }8 HRESULT res=-1;9 // 10 CString m_strInEdit;11 12 GetPrivateProfileString("SQLLINK","ServerPZ","",m_strInEdit.GetBuffer(MAX_PATH),MAX_PATH,".\\config.ini");13 m_strInEdit.ReleaseBuffer();14 if (!m_strInEdit.IsEmpty())15 {16 int iLen =m_strInEdit.GetLength();17 18 for(int i=0;i<iLen;i++)19 {20 m_strInEdit.SetAt(i,m_strInEdit[i]-1);21 }22 m_strInEdit.MakeReverse();23 }24 // 25 try 26 {27 CString Sqlstr;28 //TRACE(m_strInEdit); 29 Sqlstr =m_strInEdit;30 res = m_pConn->Open((_bstr_t)Sqlstr,"","",0);//´ò¿ª 31 if(res==S_OK)//0 32 {33 TRACE("打开数据库成功!");34 }35 else 36 {37 TRACE("打开数据库失败!");38 returnFALSE;39 }40 }41 catch(_com_error e)42 {43 CString errormessage;44 errormessage.Format("错误信息:%s",e.ErrorMessage());45 AfxMessageBox(errormessage);46 ShellExecute(NULL,"open",".\\sqlLink.exe","config.ini",NULL,SW_SHOW);47 returnFALSE;48 }
- 另附: ADO Recordset 对象中的updateBatch函数的使用方法
1.设置 pRecord->CursorLocation = adUseClient;
2.open方法中设置lockType 为adLockBatchOptimistic
1 _RecordsetPtr pRecord;2 pRecord.CreateInstance("ADODB.Recordset");3 4 pRecord->CursorLocation =adUseClient;5 6 CString strSQL ;7 strSQL.Append("SELECT * fROM emp");8 9 try 10 {11 pRecord->Open(_bstr_t(strSQL),pConnection.GetInterfacePtr(),adOpenStatic,adLockBatchOptimistic,adCmdText);12 13 CString strValue;14 while(!pRecord->AdoEOF)15 {16 strValue.Format("Test_%d",pRecord->AbsolutePosition);17 pRecord->PutCollect("name",_variant_t(strValue));18 pRecord->MoveNext();19 }20 21 pRecord->UpdateBatch(adAffectAll);22 pRecord->Close();23 }24 catch(_com_error &e)25 {26 OutputDebugString(e.Description());27 }
----------------------------------------------------------------------------------------------------------------------------------------------------------------
用DirectShow到了枚举设备,放在程序开始出,没有任何输出结果,查代码发现用的:
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void **) &p->pICreateDevEnum);
返回值居然错误,才恍然大悟,原来是没有初始化COM组件。
加上:
CoInitializeEx(NULL,COINIT_MULTITHREADED|COINIT_SPEED_OVER_MEMORY);
一切正常:)
顺便查了下:
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象,原因是 程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。
有哪些方式呢?单线程和多线程。
CoInitialize 指明以单线程方式创建。
CoInitializeEx可以指定COINIT_MULTITHREADED以多线程方式创建。
创 建单线程方式的COM服务器时不用考虑串行化问题,多线程COM服务器就要考虑。
在使用中,使用CoInitialize创建可使对 象直接与线程连接,得到最高的性能。创建多线程对象可以直接接收所有线程的调用,不必像单线程那样需要消息排队,但却需要COM创建线程间汇集代理,这样 访问效率不高。
注:新的应用程序应该调用CoInitializeEx而不是CoInitialize,一般是在 Dll 中使用 COM 才会需要使用的。
OleInitialize、CoInitialize、CoInitializeEx和AfxOleInit()区别
转载于:https://www.cnblogs.com/it-duit/p/5828585.html
ADO ( 问数据库数据 的编程 接口)相关推荐
- 金仓数据库 KingbaseES 客户端编程接口指南 - JDBC(11. JDBC 示例说明)
11. JDBC 示例说明 在所提供的用例中,使用的数据库信息为,用户名:system; 密码:manager; 数据库名:test; 端口号:54321 数据源示例 连接池示例 Statement ...
- 金仓数据库KingbaseES客户端编程接口指南-DCI(3. DCI 工程配置)
3. DCI 工程配置¶ Windows 平台工程搭建(vs2008) Linux平台工程搭建 服务的配置方法与参数说明 多主机地址配置 3.1. Windows 平台工程搭建(VS2008) 3.2 ...
- 金仓数据库KingbaseES客户端编程接口指南-ODBC(6. KingbaseES ODBC 的扩展属性)
6. KingbaseES ODBC 的扩展属性 KingbaseES ODBC 数据源的高级选项 Linux环境下SQLDriverConnect()连接串中KingbaseES ODBC的扩展连接 ...
- 金仓数据库 KingbaseES 客户端编程接口指南 - ODBC 驱动使用
7. KingabseES ODBC 驱动使用 Windows 中 ODBC 驱动使用步骤(VS2013) Linux 下调用 ODBC 驱动步骤 7.1. Windows 中 ODBC 驱动使用步骤 ...
- vb mysql ado_VB中的ADO数据对象编程详解
ADO是ActiveX Data Objects 的缩写,是一项新的数据库的存取技术 那天听到一位同学说他的女朋友是学新闻的可也学会了数据库,可学计算机的自己却还是不会,总觉得有点汗颜.在各网站的论坛 ...
- Windows数据库编程接口简介
数据库是计算机中一种专门管理数据资源的系统,目前几乎所有软件都需要与数据库打交道(包括操作系统,比如Windows上的注册表其实也是一种数据库),有些软件更是以数据库为核心因此掌握数据库系统的使用方法 ...
- 在Visual C++中用ADO进行数据库编程(上)
在Visual C++中用ADO进行数据库编程(上) 1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数 ...
- 数据库访问抽象层系列-1(介绍数据库编程接口及数据库访问抽象层概念)
摘要 本人最近完成了一个封装数据库访问抽象层的项目.我们开发的数据库访问抽象层作为分布式集群基础平台的一个组件.可以支持不同数据库编程接口(OCI.mysql.ODBC.pgsql)等.本系列博客主要 ...
- 利用 Node.js 实现 SAP Hana 数据库编程接口
为什么80%的码农都做不了架构师?>>> 自 SAP HANA SP 11 之后,可以使用 Node.js 作为 Hana 的编程接口.SAP 将 Application se ...
- 在Visual C++中用ADO进行数据库编程(中)
在Visual C++中用ADO进行数据库编程(中) 4.执行SQL命令并取得结果记录集 为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr ...
最新文章
- Hibernate修改命名策略
- 在Eclipse中使用OpenCV Java
- Android 控件
- 安全云盘项目(二):2.1 基于libevent的C++线程池
- python中的scipy基础知识_Python机器学习(五十二)SciPy 基础功能
- c#的内存管理(托管及未托管对象管理)
- python传奇自动打怪脚本_GOM引擎内挂自动挂机打怪脚本实例
- 3小时GIS入门教程(二)GIS数据格式、坐标系
- 混合效应模型和广义线性模型计算R方的函数sem.model.fits
- easyexcel表头和内容居中
- 测试之道——阿里巴巴八年测试专家倾情奉献
- QGraphicsItem基本图元的添加以及闪烁图元和移动图元的添加
- XML 测试用例分类Variants参数
- 基于Origin的一种SCI论文中多图合并的简单方法----核心合并图表
- Flash 与数学:星形线
- TI AM5728 DSP+ARM多核通信开发例程
- 偏移变色lisp_渐进式 多重偏移,见图片效果 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - 偏移 - Powered by Discuz!...
- SSH + Lucene + 分页 + 排序 + 高亮 模拟简略新闻网站搜索引擎
- workbench应力应变曲线_ANSYS WorkBench 结构分析中的几种材料模型与对应的分析类型...
- A canvas fillText and strokeText example