一般来说获取数据库表的方法是采用类似

select * from table_name

这样的sql语句。SQL语句必然伴随着数据库的解释执行,一般来说效率比较低下,而且使用SQL语句时需要数据库支持ICommandText对象,但是在OLEDB中它是一个可选接口,也就是有的数据库可能不支持,这个时候OLEDB给我们提供了一种方法让我们能够在不使用SQL的情况下操作数据库表对象。

直接打开表对象需要使用IOpenRowset接口。该接口属于Session对象。

打开数据库表的一般步骤

  1. 声明一个DBID结构对象
  2. 为结构对象的ekind(对象种类)字段赋值DBKIND_NAME值
  3. 为结构对象的uName.pwszName字段赋值为表名
  4. 调用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语句直接打开数据表相关推荐

  1. 用SQL语句查看Oracle数据表的结构信息

    文章目录 获取所有表的列表 查看表结构 查看某表的注释 查看某表的字段注释 获取所有表的列表 相知道相应用户下有哪些表,可以通过以下 SQL 语句进行查询 select table_name from ...

  2. SqlServer中通过Sql语句批量删除数据表

    业务描述: 我们在实际生产中,有时候可能会需要批量删除数据库中的某些数据表(比如:在导数据时,需要将数据库A中的某些表数据导入到数据库B中,导入的过程中也需要将数据库A的某些表结构也需要导过去,当数据 ...

  3. mysql中通过sql语句查询指定数据表的字段信息

      mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...

  4. 如何用SQL语句查询Excel数据

    Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT *  FROM OpenDataSource(  ...

  5. excel mysql 参数查询语句_如何用SQL语句查询Excel数据?

    如何用SQL语句查询Excel数据? Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMO ...

  6. excel mysql 参数查询语句_如何用SQL语句查询Excel数据

    Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT * FROM OpenDataSource( ' ...

  7. 常用SQL语句大全,数据分析师入门必备!

    1 基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  8. c 将mysql表数据打印,c 中数据库数据如何导出至excel表格-用sql语句把一个数据库内的表保存成excel表格??...

    如何用JAVA将数据库中的数据导入到excel表格 1.C语言产生ASCII数据文件,使用空格做作为数据分隔符. 2入Excel,选择数据选项卡 / 获部数据工具组 / 自文本按钮 3.进入数据导入框 ...

  9. 微软企业库mysql分页存储_使用微软企业库,非分页sql语句得到分页数据方法

    最近使用微软企业库,在做分页绑定的时候发现好象还没有多少通用的方法.为了灵活和换数据库,我不能使用存储过程.为了开发速度最快.我就是用datagrid绑定了. 以前长用的 DataAdapter.Fi ...

最新文章

  1. 深度详解ResNet到底在解决一个什么问题?
  2. linux怎么取消文件隐藏命令,Linux基础命令:显示隐藏的文件
  3. 多场景抢红包业务引发.NETCore下使用适配器模式实现业务接口分离
  4. 每日一测4(装箱与拆箱)
  5. AI、元宇宙技术方兴未艾,软件测试重装上阵
  6. 苹果笔记本电脑亮度无法调节_苹果MacBook AirM1评测:M1芯片给您不一样的体验
  7. raid卡组不同raid_RAID 类型介绍
  8. win7如何删除mariadb
  9. spring cloud 入门系列六:使用Zuul 实现API网关服务
  10. 蓝桥杯 2018年蓝桥杯C语言大学C组 C/C++
  11. YUV420查表法高效、无失真的转换为RGB32格式
  12. 基于springboot的户外租车系统
  13. html网页添加友链,教你如何添加网站友情链接
  14. PSpice Model Editor建模介绍
  15. 2018年小美赛C题参赛经历
  16. SQL 删除数据空格(Trim、RTrim、LTrim函数)
  17. 本科生毕业论文(设计)撰写规范
  18. arm学习方法(转)
  19. 制作启动u盘总结 centos6/centos7
  20. 一台台式计算机应该具有哪些设备,电脑硬件有哪些?组装一台电脑需要哪些配件详解...

热门文章

  1. io.js 1.0.x发布
  2. 农民思考互联网时代农民的未来
  3. Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
  4. bash下: () {} [] [[]] (())的解释
  5. Windows Mobile Topics at TechEd 2008
  6. springboot与springcloud的关系(转载)
  7. Unknown custom element: xxx
  8. ubuntu18.10下面从视频中提取音频
  9. sublime突然中文乱码
  10. 补码为什么要取反加1?