ATL OLE DB
Truther
这个作者很懒,什么都没留下…
展开
-
使用者向导生成的几个关键方法简析
使用OLE DB进行数据库编程时,可以通过向导快速建立一个使用者(Consumer)。向导会自动生成一些方法。为了正确使用生成的使用者,弄清楚这些方法究竟做些什么是必要的。下面就对其中比较关键的几个做一个简单分析。(注:以下结论主要通过实验和阅读源代码得出,仅供参考。如有错误还望指正。) 首先我们需要明白一点,那就是在创建使用者时你把如下一些基本信息提供给了向导:欲连原创 2010-04-05 12:30:00 · 735 阅读 · 0 评论 -
CCommand::Open的bBind参数使用方法
CCommand::Open方法的bBind参数是个很重要的参数。它的作用到底是什么呢?通过实验,我得出了一些答案,现概括如下。 我们知道CCommand是通过rowset和数据库进行交互的。在执行一条SQL语句后,貌似需要将SQL的执行结果(如SELECT的结果)同rowset邦定起来,如此便可以从rowset中取得结果。而bBind参数的作用就是决定在执行完SQL后是原创 2010-04-05 15:42:00 · 1323 阅读 · 1 评论 -
命令释放与记录释放
在OLE DB的使用过程中,有几个关于释放的函数需要特别区分清楚,它们是:CCommand::Close、CCommand::ReleaseCommand以及CAccessorRowset::FreeRecordMemory。 当使用CCommand进行数据库访问时,有三样东西是需要的,即行集(Rowset)、结果集存取器(Result set accessor)以及原创 2010-04-04 13:43:00 · 752 阅读 · 0 评论 -
CDynamicAccessor的应用
一直以来CAccessor都用得挺好,但今天突然遭遇到CAccessor的局限性了。不过好在发现了CDynamicAccessor这东西,用它解决了问题。 MSDN上说当你对目标数据源的结构,比如表的构成,很清楚时,使用CAccessor;当你对目标数据源不甚了解时则使用CDynamicAccessor。理论上讲,MSDN的说法是没有问题的,但我实在想象不出除了去hack原创 2010-04-06 20:20:00 · 1383 阅读 · 0 评论 -
计算列相关问题的讨论
所谓计算列,即其值不是独立指定的,而是由其余列值计算出来的列。比如平均成绩就是一个典型的计算列。下面简单讨论下使用计算列过程中所需注意的一些问题。环境:SQL Server 2000,VC++ 2008 SP1,ATL OLE DB。 计算列可能在两种不同的情形中出现:一是出现在CREATE TABLE时列的定义里,一是出现在SELECT语句中。先讨论第一种情形。原创 2010-04-07 11:44:00 · 814 阅读 · 0 评论 -
CMultipleResults的使用
CMultipleResults顾名思义,即多结果的意思。那么什么时候会出现多结果呢?考虑这样的语句command.Open(session, "SELECT Name FROM Students SELECT Degree FROM Lovers");该语句一次性执行了两条SQL查询命令,返回的结果自然有两个咯。CCommand的第三个模板参数TMultiple就用于决定对多结果的支原创 2010-04-09 19:37:00 · 707 阅读 · 0 评论 -
CDynamicParameterAccessor避免内存泄漏的使用方法
由于ATL OLE DB基于方便性和效率上的考虑,并未遵循“谁申请,谁释放”的内存管理原则[1],因此在使用过程中应特别小心,否则就可能出现内存泄漏。下面讨论CDynamicParameterAccessor的使用。对于该类的使用,稍有不慎就会导致内存泄漏。 文章[2]中提到了CDynamicParameterAccessor的一种可能内存泄漏使用情形。对于该问题,除了可原创 2010-04-10 16:25:00 · 1018 阅读 · 1 评论 -
CCommand的资源管理方式
最近通过对ATL OLE DB源代码的进一步阅读,在验证了一些猜想的同时也发现了之前对CCommand资源管理方式的某些错误认识。这些认识上的错误可能隐式或显示地反映在了之前的相关博文中。为什么我会产生错误的认识呢?原因是我低估了CCommand的封装程度-_-!!!现将发现总结如下:1、若CCommand使用CAccessor,则在绑定返回结果时(调用Bind方法)会首先调用me原创 2010-04-08 00:14:00 · 929 阅读 · 0 评论