OLEDB不使用SQL语句直接打开数据表
一般来说获取数据库表的方法是采用类似
select * from table_name
这样的sql语句。SQL语句必然伴随着数据库的解释执行,一般来说效率比较低下,而且使用SQL语句时需要数据库支持ICommandText对象,但是在OLEDB中它是一个可选接口,也就是有的数据库可能不支持,这个时候OLEDB给我们提供了一种方法让我们能够在不使用SQL的情况下操作数据库表对象。
直接打开表对象需要使用IOpenRowset接口。该接口属于Session对象。
打开数据库表的一般步骤
- 声明一个DBID结构对象
- 为结构对象的ekind(对象种类)字段赋值DBKIND_NAME值
- 为结构对象的uName.pwszName字段赋值为表名
- 调用IOpenRowset接口的OpenRowset方法,将DBID结构的指针传入,并让函数返回结果集对象
IOpenRowset接口属于Session,可以在使用CreateSession时让其直接打开这个接口,而且该接口是必须实现的接口,因此不用担心获取不到的情况,得到这个接口后就可以直接使用接口的OpenRowset方法。
OpenRowset函数原型如下:
HRESULT OpenRowset(IUnknown *pUnkOuter,DBID *pTableID, //打开表时使用该结构DBID *pIndexID, //打开索引时使用这个参数REFIID riid, //返回对象的GUIDULONG cPropertySets, //给对应返回对象设置的属性集的个数DBPROPSET rgPropertySets[], //给对应对象设置的属性集IUnknown **ppRowset); // 返回的接口
从函数定义上来,这种方式还可以用来打开索引
使用实例
BOOL OpenTable(IOpenRowset *pIOpenRowset, IRowset* &pIRowset)
{DBID dbId = {0};dbId.eKind = DBKIND_NAME;dbId.uName.pwszName = OLESTR("aa26");DBPROP dbRowsetProp[4] = {0};DBPROPSET dbRowsetPropset[1] = {0};//运行直接使用对应接口函数对数据库进行增删改操作dbRowsetProp[0].colid = DB_NULLID;dbRowsetProp[0].dwOptions = DBPROPOPTIONS_REQUIRED;dbRowsetProp[0].dwPropertyID = DBPROP_UPDATABILITY;dbRowsetProp[0].vValue.vt = VT_I4;dbRowsetProp[0].vValue.intVal = DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE | DBPROPVAL_UP_DELETE;//运行在删改的同时插入数据dbRowsetProp[1].colid = DB_NULLID;dbRowsetProp[1].dwOptions = DBPROPOPTIONS_REQUIRED;dbRowsetProp[1].dwPropertyID = DBPROP_CANHOLDROWS;dbRowsetProp[1].vValue.vt = VT_BOOL;dbRowsetProp[1].vValue.boolVal = VARIANT_TRUE;//打开IRowsetUpdate接口,实现延迟更新dbRowsetProp[2].colid = DB_NULLID;dbRowsetProp[2].dwOptions = DBPROPOPTIONS_REQUIRED;dbRowsetProp[2].dwPropertyID = DBPROP_IRowsetUpdate;dbRowsetProp[2].vValue.vt = VT_BOOL;dbRowsetProp[2].vValue.boolVal = VARIANT_TRUE;dbRowsetPropset[0].cProperties = 3;dbRowsetPropset[0].guidPropertySet = DBPROPSET_ROWSET;dbRowsetPropset[0].rgProperties = dbRowsetProp;HRESULT hRes = pIOpenRowset->OpenRowset(NULL, &dbId, NULL, IID_IRowset, 1, dbRowsetPropset, (IUnknown**)&pIRowset);return SUCCEEDED(hRes);
}
详细的代码请参考: 完整代码
转载于:https://www.cnblogs.com/lanuage/p/8830903.html
OLEDB不使用SQL语句直接打开数据表相关推荐
- 用SQL语句查看Oracle数据表的结构信息
文章目录 获取所有表的列表 查看表结构 查看某表的注释 查看某表的字段注释 获取所有表的列表 相知道相应用户下有哪些表,可以通过以下 SQL 语句进行查询 select table_name from ...
- SqlServer中通过Sql语句批量删除数据表
业务描述: 我们在实际生产中,有时候可能会需要批量删除数据库中的某些数据表(比如:在导数据时,需要将数据库A中的某些表数据导入到数据库B中,导入的过程中也需要将数据库A的某些表结构也需要导过去,当数据 ...
- mysql中通过sql语句查询指定数据表的字段信息
mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...
- 如何用SQL语句查询Excel数据
Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT * FROM OpenDataSource( ...
- excel mysql 参数查询语句_如何用SQL语句查询Excel数据?
如何用SQL语句查询Excel数据? Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMO ...
- excel mysql 参数查询语句_如何用SQL语句查询Excel数据
Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT * FROM OpenDataSource( ' ...
- 常用SQL语句大全,数据分析师入门必备!
1 基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- c 将mysql表数据打印,c 中数据库数据如何导出至excel表格-用sql语句把一个数据库内的表保存成excel表格??...
如何用JAVA将数据库中的数据导入到excel表格 1.C语言产生ASCII数据文件,使用空格做作为数据分隔符. 2入Excel,选择数据选项卡 / 获部数据工具组 / 自文本按钮 3.进入数据导入框 ...
- 微软企业库mysql分页存储_使用微软企业库,非分页sql语句得到分页数据方法
最近使用微软企业库,在做分页绑定的时候发现好象还没有多少通用的方法.为了灵活和换数据库,我不能使用存储过程.为了开发速度最快.我就是用datagrid绑定了. 以前长用的 DataAdapter.Fi ...
最新文章
- 深度详解ResNet到底在解决一个什么问题?
- linux怎么取消文件隐藏命令,Linux基础命令:显示隐藏的文件
- 多场景抢红包业务引发.NETCore下使用适配器模式实现业务接口分离
- 每日一测4(装箱与拆箱)
- AI、元宇宙技术方兴未艾,软件测试重装上阵
- 苹果笔记本电脑亮度无法调节_苹果MacBook AirM1评测:M1芯片给您不一样的体验
- raid卡组不同raid_RAID 类型介绍
- win7如何删除mariadb
- spring cloud 入门系列六:使用Zuul 实现API网关服务
- 蓝桥杯 2018年蓝桥杯C语言大学C组 C/C++
- YUV420查表法高效、无失真的转换为RGB32格式
- 基于springboot的户外租车系统
- html网页添加友链,教你如何添加网站友情链接
- PSpice Model Editor建模介绍
- 2018年小美赛C题参赛经历
- SQL 删除数据空格(Trim、RTrim、LTrim函数)
- 本科生毕业论文(设计)撰写规范
- arm学习方法(转)
- 制作启动u盘总结 centos6/centos7
- 一台台式计算机应该具有哪些设备,电脑硬件有哪些?组装一台电脑需要哪些配件详解...
热门文章
- io.js 1.0.x发布
- 农民思考互联网时代农民的未来
- Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
- bash下: () {} [] [[]] (())的解释
- Windows Mobile Topics at TechEd 2008
- springboot与springcloud的关系(转载)
- Unknown custom element: xxx
- ubuntu18.10下面从视频中提取音频
- sublime突然中文乱码
- 补码为什么要取反加1?