首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OLEDB事务

使用事务保证了数据的完整性。...这里不展开详细的说事务,只是谈谈OLEDB在事务上的支持 ITransactionLocal接口 OLEDB中支持事务的接口是ITransactionLocal接口,该接口是一个可选接口,OLEDB并不强制要求所有数据库都支持该接口...,所以在使用之前需要先判断是否支持,好在现在常见的几种数据库都支持。...ISOLATIONLEVEL_CURSORSTABILITY,那么在同一事务中只有当其中一个客户端提交了事务更新后,另外一个客户端才能正常的进行查询等操作,可以简单的将这个标识视为它在数据库中上了锁,只有当它完成事务后其他客户端才可以正常使用数据库...当所有步骤都正常完成后调用ITransaction::Commit方法提交事务所做的所有修改 或者当其中有一步或者几步失败时调用ITransaction::Abort方法回滚所有的操作 演示例子 //注意使用

59840
您找到你想要的搜索结果了吗?
是的
没有找到

OLEDB 调用存储过程

除了常规调用sql语句和进行简单的插入删除操作外,OLEDB还提供了调用存储过程的功能,存储过程就好像是用SQL语句写成的一个函数,可以有参数,有返回值。...存储过程除了像普通函数那样返回一般的值以外,还可以返回结果集,对于返回的内容可以使用输出参数的方式获取,但是如果返回的是结果集,一般不推荐使用输出参数来获取,一般采用的是使用多结果集来接收。...另外对于输入参数一般采用参数化查询的方式进行,因此它的使用与参数化查询类似,但是相比于参数化查询来说要复杂一些。...存储过程的使用 对于输出参数,在绑定DBBINDING 结构的时候,将结构的eParamIO指定为DBPARAMIO_OUTPUT,调用存储过程可以使用类似下面的格式 {?...针对他的这个特性,我们一般是先使用存储过程返回的结果集,然后释放结果集的相关指针,接着从输出参数的缓冲中取出数据,最后释放这些缓冲。

1.7K10

OLEDB 数据变更通知

除了之前介绍的接口,OLEDB还定义了其他一些支持回调的接口,可以异步操作OLEDB对象或者得到一些重要的事件通知,从而使应用程序有机会进行一些必要的处理。其中较有用的就是结果集对象的变更通知接口。...标准COM的回调方式 为了更好的理解OLEDB的回调,先回忆一下标准COM的回调方式。...这个机制有点类似于QT中的信号和槽函数机制,QT中的事件是实现定义好的,可以直接使用而这里是需要通过事件ID找到具体事件,拥有事件后,与QT步骤类似,都是需要将事件与对应的回调函数绑定。...IRowsetNotify接口 对于OLEDB结果集来说,最重要的事件接口是IRowsetNotify,该接口提供三个重要的通知函数: OnFieldChange:列数据发生变更 OnRowChange...一般操作数据结果集有5个状态,分别对应这样的5个值: DBEVENTPHASE_OKTODO:准备好了去做,当应用程序需要操作结果集的时候会发送一个DBEVENTPHASE_OKTODO到监听程序(在这暂时就理解为OLEDB

1.5K30

OLEDB数据源

title: OLEDB数据源 date: 2018-01-12 21:42:37 tags: [OLEDB, 数据库编程, VC++, 数据库] categories: windows 数据库编程...keywords: OLEDB, 数据库编程, VC++, 数据库 --- 数据源在oledb中指数据提供者,这里可以简单的理解为数据库程序。...,如果需要使用可选择的接口,一定要判断数据源是否支持。...IDataInitialize接口来创建数据源对象 使用IDataInitialize接口可以直接使用连接字串连接到数据库,下面是使用连接字串的例子: void ConnectSQLServerByConnstr...其实在OLEDB中,可以认为连接字串最终被翻译为对应的属性,也就是说OLEDDB保存着对应连接的属性,我们可以通过不同的方式来获取不同类型的属性,比如使用IDBProperties接口来获取对应的链接属性

76920

OLEDB 参数化查询

一般情况下,SQL查询是相对固定的,一条语句变化的可能只是条件值,比如之前要求查询二年级学生信息,而后面需要查询三年级的信息,这样的查询一般查询的列不变,后面的条件只有值在变化,针对这种查询可以使用参数化查询的方式来提高效率...参数化查询的优势: 提高效率:之前说过,数据库在执行SQL的过程中,每次都会经过SQL的解析,编译,调用对应的数据库组件,这样如果执行多次同样类型的SQL语句,解析,编译的过程明显是在浪费资源,而参数化查询就是使用编译好的过程...这里可以简单的将传统的SQL拼接方式理解为C语言中的宏,宏也可以有参数,但是它不对参数进行校验,只是简单的进行替换,那么我可以使用一些指令作为参数传入,但是函数就不一样,函数的参数就是具体类型的变量或者常量...参数化查询的使用 前面说了这么多参数化查询的好处,那么到底怎么使用它呢? 在Java等语言中内置了数据库操作,而对于C/C++来说,它并没有提供这方方面的标准。...不同的平台有自己独特的一套机制,但是从总体来说,思想是共通的,只是语法上的不同,这里主要是说明OLEDB中的使用方式。 使用“?”

1.3K30

OLEDB存取BLOB型数据

针对BLOB型数据,OLEDB也提供了对它的支持 使用BLOB型数据的利弊 一般数据库对BLOB型数据有特殊的处理方式,比如压缩等等,在数据库中存储BLOB数据可以方便的进行检索,展示,备份等操作。...针对这类文件一般的做法是将其保存在系统的某个路径钟中,而在数据库中存储对应的路径 操作BLOB型数据的一般方法 一般针对BLOB不能像普通数据那样操作,而需要一些特殊的操作,在OLEDB中通过设置绑定结构中的一些特殊值最终指定获取...ISequentialStream接口,但是它不像之前可以直接使用接口的Write方法,写入的对象必须要自己从ISequentialStream接口派生,并指定一段内存作为缓冲,以便供OLEDB组件调用写方法时作为数据缓冲...这段缓冲必须要保证分配在COM堆上,也就是要使用CoTaskMemory分配内存。...插入BLOB数据时,首先创建一个派生类的对象,注意此处由于后续要交给OLEDB组件调用,所以不能用栈内存。

2.1K30

OLEDB 枚举数据源

其实这个功能是OLEDB提供的高级功能之一。 枚举对象用于搜寻可用的数据源和其它的枚举对象(层次式),枚举出来的对象是一个树形结构。...在程序中提供一个枚举对象就可以枚举里面的所有数据源,如果没有指定所使用的的上层枚举对象,则可以使用顶层枚举对象来枚举可用的OLEDB提供程序,其实我们使用枚举对象枚举数据源时它也是在注册表的对应位置进行搜索...,所以我们可以直接利用操作注册表的方式来获取数据源对象,但是注册表中的信息过于复杂,而且系统对注册表的依赖比较严重,所以并不推荐使用这种方式。...或者称之为根枚举器,根枚举器对象的CLSID是CLSID_OLEDB_ENUMNRATOR,顶层枚举对象可以使用标准的COM对象创建方式来创建,之后可以使用ISourceRowset对象的GetSourcesRowset...相比于直接使用CoCreateInstance来说是一种更加高级的方法。

66510

OLEDB使用SQL语句直接打开数据表

SQL语句必然伴随着数据库的解释执行,一般来说效率比较低下,而且使用SQL语句时需要数据库支持ICommandText对象,但是在OLEDB中它是一个可选接口,也就是有的数据库可能不支持,这个时候OLEDB...给我们提供了一种方法让我们能够在不使用SQL的情况下操作数据库表对象。...直接打开表对象需要使用IOpenRowset接口。该接口属于Session对象。...uName.pwszName字段赋值为表名 调用IOpenRowset接口的OpenRowset方法,将DBID结构的指针传入,并让函数返回结果集对象 IOpenRowset接口属于Session,可以在使用...CreateSession时让其直接打开这个接口,而且该接口是必须实现的接口,因此不用担心获取不到的情况,得到这个接口后就可以直接使用接口的OpenRowset方法。

57720

OLEDB 静态绑定和数据转化接口

OLEDB 提供了静态绑定和动态绑定两种方式,相比动态绑定来说,静态绑定在使用上更加简单,而在灵活性上不如动态绑定,动态绑定在前面已经介绍过了,本文主要介绍OLEDB中的静态,以及常用的数据类型转化接口...数据关系对应表 一般静态绑定需要将数据库表的各项数据与结构体中的成员一一对应,这个时候就涉及到数据库数据类型到C/C++中数据类型的转化,下表列举了常见的数据库类型到C/C++数据类型的转化关系 数据库类型 OLEDB...而在访问数据时就需要自己计算偏移,直接使用结构体中的成员即可。...这也是使用这个数据转化接口的主要原则。...数据转换接口的使用 使用COM标准的方式创建IDataConver接口(调用CreateInstance函数传入CLSID_OLEDB_CONVERSIONLIBRARY创建一个IID_IDataConvert

68010

ATL模板库中的OLEDB与ADO

上次将OLEDB的所有内容基本上都说完了,从之前的示例上来看OLEDB中有许多变量的定义,什么结果集对象、session对象、命令对象,还有各种缓冲等等,总体上来说直接使用OLEDB写程序很麻烦,用很大的代码量带来的仅仅只是简单的功能...ATL中的OLEDB主要有两大模块,提供者模块和消费者模块,顾名思义,提供者模块是数据库的开发人员使用的,它主要使用这个模块实现OLEDB中的接口,对外提供相应的数据库服务;消费者模块就是使用OLEDB...模板的使用 静态绑定 针对静态绑定,VS提供了很好的向导程序帮助我们生成对应的类,方便了开发,使用的基本步骤如下: 在项目上右键,选择添加类 在类选择框中点击ATL并选择其中的ATL OLEDB使用者...而后面的Caa26类主要是用来执行sql语句并根据上面的访问器类来解析数据,其实我们使用上主要使用后面这个类,这些代码都很简单,有之前的OLEDB基础很容易就能理解它们,这里就不再在这块进行展开了 int...其实上述问题使用二者的混合编程就可以很好的解决,在处理结果集时使用OLEDB,而在其他操作时使用ADO这样既保留了ADO的简洁性也使用OLEDB灵活管理结果集内存的能力。

1.3K20

asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册Microsoft.Jet.OLEDB.4.0 提供程序

笔者在项目中做做了一个从Excel表格中导入数据的模块、大体上asp.net项目中导入Excel大体分成三类: 1)采用c#内置方案System.Data.OleDb(限制较小, 通用) 2)采用Excel...的COM组件(会有版本问题) 3)采用伪Excel文件、即使用文本流的方式根据需求自己定义数据格式。...同时在服务端进行反格式化 笔者采用的是方案一、相关联开发环境如下: Windows 7(x64) Visual Studio 2010 方案中使用的代码: public sealed class ExcelHelper...{ private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}...return list; } 程序在执行时会抛出: 异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“Microsoft.Jet.OLEDB

1.9K10

OLEDB 简单数据查找定位和错误处理

在数据库查询中,我们主要使用的SQL语句,但是之前也说过,SQL语句需要经历解释执行的步骤,这样就会拖慢程序的运行速度,针对一些具体的简单查询,比如根据用户ID从用户表中查询用户具体信息,像这样的简单查询...OLEDB提供了专门的查询接口。...使用该接口可以很大程度上提升程序性能。...另外在之前的代码中,只是简单的通过HRESULT这个返回值来判断是否成功,针对错误没有具体的处理,但是OLEDB提供了自己的处理机制,这篇博文主要来介绍这两种情况下的处理方式 简单数据查询和定位 它的使用方法与之前的简单读取结果集类似...COM中可以使用GetErrorInfo函数得到一个错误的信息的接口,IErrorInfo,进一步可以根据该接口的对应函数可以得到具体的错误信息。

66720
领券