CCommand::Open的bBind参数使用方法
2010-04-05 15:42
260 查看
CCommand::Open方法的bBind参数是个很重要的参数。它的作用到底是什么呢?通过实验,我得出了一些答案,现概括如下。
我们知道CCommand是通过rowset和数据库进行交互的。在执行一条SQL语句后,貌似需要将SQL的执行结果(如SELECT的结果)同rowset邦定起来,如此便可以从rowset中取得结果。而bBind参数的作用就是决定在执行完SQL后是否自动完成这个邦定。bBind的默认实参为true,即完成自动邦定。
固然,bBind的默认实参用在SELECT类型的语句上是没有问题的,但对于INSERT、DELETE、UPDATE类型的语句来说就有问题了。原因很简单,这些SQL语句都不返回任何结果,你邦定啥捏?如果此时仍然以bBind的默认实参调用Open,会出现如下情况:
1、SQL实际执行成功。比如执行的是INSERT,则插入成功。
2、在Debug模式下Open会引发一个断言失败。通过断言的表达式估计大致情形是在进行邦定的时候断言指向结果的指针非空,而此时为空。
3、不创建rowset。此时对MoveNext等方法的调用将引发断言失败。大致意思是指向rowset的指针为空。
由于没有创建rowset,也就不用在执行下一条SQL语句前调用Close了。不过ReleaseCommand还是需要调用的,否则虽然程序貌似正确执行,但实际内存泄露了。此外,即使INSERT等的执行不会访问rowset,如果调用Open前rowset存在(没有被Close掉),仍然会引发一个断言失败。
现在考虑SELECT类型的SQL语句。如果此时以bBind =
false调用Open会出现什么情况捏?经实验,结果是:rowset被正确创建,但内容没有被初始化。这具体是什么意思呢?举例来说,如果SELECT实际返回一个包含3条记录的结果集,则对MoveNext等方法的调用能正确反映这个数量,但每次通过CAccessor取出的内容都是没有初始化的。这时,需要手动调用Bind方法来完成rowset内容的初始化。
我们知道CCommand是通过rowset和数据库进行交互的。在执行一条SQL语句后,貌似需要将SQL的执行结果(如SELECT的结果)同rowset邦定起来,如此便可以从rowset中取得结果。而bBind参数的作用就是决定在执行完SQL后是否自动完成这个邦定。bBind的默认实参为true,即完成自动邦定。
固然,bBind的默认实参用在SELECT类型的语句上是没有问题的,但对于INSERT、DELETE、UPDATE类型的语句来说就有问题了。原因很简单,这些SQL语句都不返回任何结果,你邦定啥捏?如果此时仍然以bBind的默认实参调用Open,会出现如下情况:
1、SQL实际执行成功。比如执行的是INSERT,则插入成功。
2、在Debug模式下Open会引发一个断言失败。通过断言的表达式估计大致情形是在进行邦定的时候断言指向结果的指针非空,而此时为空。
3、不创建rowset。此时对MoveNext等方法的调用将引发断言失败。大致意思是指向rowset的指针为空。
由于没有创建rowset,也就不用在执行下一条SQL语句前调用Close了。不过ReleaseCommand还是需要调用的,否则虽然程序貌似正确执行,但实际内存泄露了。此外,即使INSERT等的执行不会访问rowset,如果调用Open前rowset存在(没有被Close掉),仍然会引发一个断言失败。
现在考虑SELECT类型的SQL语句。如果此时以bBind =
false调用Open会出现什么情况捏?经实验,结果是:rowset被正确创建,但内容没有被初始化。这具体是什么意思呢?举例来说,如果SELECT实际返回一个包含3条记录的结果集,则对MoveNext等方法的调用能正确反映这个数量,但每次通过CAccessor取出的内容都是没有初始化的。这时,需要手动调用Bind方法来完成rowset内容的初始化。
相关文章推荐
- C# 使用 Environment.GetCommandLineArgs 方法 制作*.exe和参数 供其他程序调用
- 【专题】window.open的例子和使用方法以及参数说明(完整版)
- javascript弹出窗口 window.open使用方法以及参数说明分析篇
- window.open的使用方法以及参数说明
- C# 使用 Environment.GetCommandLineArgs 方法 制作*.exe和参数 供其他程序调用
- window.open的例子和使用方法以及参数说明
- window.open的例子和使用方法以及参数说明(完整版)
- window.open使用方法以及参数说明
- JavaScript---window.open使用方法以及参数说明(完整版)
- [技术]window.open的使用方法以及参数说明
- window.open使用方法以及参数说明
- window.open使用方法以及参数说明
- window.open的使用方法以及参数说明
- window.open使用方法以及参数说明
- window.open使用方法以及参数说明
- window.open的例子和使用方法以及参数说明
- window.open使用方法以及参数说明
- window.open使用方法以及参数说明
- JavaScript---window.open使用方法以及参数说明(完整版)
- window.open使用方法以及参数说明