描述:
我在应用程序里访问COM组件,COM组件通过ADO访问SQL数据库.
在应用程序中通过添加类型库引进COM组件,用AfxInitOle(),初始化组件环境. 一个函数要使用COM的话,先声明接口对象.再调用它的CreateDispatch(),结束前调用ReleaseDispatch().
Q1:有很多函数频繁的调用同一组件有问题吗? 怎么调用比较好?
在COM组件中通过#import使用ADO,在组件的头文件里声明_ConnectionPtr pConn,_Recordsetptr pRs两个变量.
函数里先CreateInstance(),再pConn->Open(),再构造SQL语句,调用pConn->Execute,把结果给pRs,然后使用pRs->fields()->GetItem()->Get_Value()取出各字段的值.最后调用pConn->Close().
Q2:在组件中有很多函数频繁的执行以上的过程有问题吗?
Q3:构造SQL语句时有什么格式要求吗? 我是大小写混在一起的.
Q4:使用pRs时对取字段的顺序有和要求吗? 什么情况下需要调用pRs->Close()呢?
Q5:我用上面的方法写程序,运行时出现零指令读零内存错误,有时提示我写的COM服务器出现意外情况,可是我找不到哪里出现指针的异常,是不是我的Close()调用的不对? 还有什么地方我没注意到?
请帮忙提供解答,资料等,不胜感激.
解决方案1:
SQL语句大小写无关,
读取结果集的顺序无关,
如果执行的SQL语句返回结果集,应该使用Close
而想Insert,Update,Select * into 等语句不能使用Close