_CommandPtr m_pCommand;
_ConnectionPtr m_pConnection; m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_variant_t)str,theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF&&m_pRecordset->BOF) {AfxMessageBox("您输入的用户名或密码错误,请重新输入!");return ;}
m_pRecordset->Close();1
_ConnectionPtr这个东西是个什么,书上说数据库连接用Connection类,但是声明的时候都用的_ConnectionPtr,它是什么东西。
2、_uuidof它是什么,是不函数还是什么,它的作用是什么?
3、GetInterfacePtr这个函数的作用是什么啊?请指点,搞了很久没弄明白
_ConnectionPtr m_pConnection; m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_variant_t)str,theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF&&m_pRecordset->BOF) {AfxMessageBox("您输入的用户名或密码错误,请重新输入!");return ;}
m_pRecordset->Close();1
_ConnectionPtr这个东西是个什么,书上说数据库连接用Connection类,但是声明的时候都用的_ConnectionPtr,它是什么东西。
2、_uuidof它是什么,是不函数还是什么,它的作用是什么?
3、GetInterfacePtr这个函数的作用是什么啊?请指点,搞了很久没弄明白
_CommandPtr _ConnectionPtr _RecordsetPtr都是智能指针类。这都从ADO COM中导出的类。这些指针类很好的封装了创建实例和释放,所以使用起来还是相对比较安全的。
智能指针类通过.CreateInstance来创建对应ADO对象的实例,2.__uuidof是操作符,可以引用指定表达式的guid
把Recordset和Connection这些名称转换为guid,因为COM对象都会在在系统注册clsid以及guid标示其唯一,同时注册了名字。可以通过guid或者名字来引用要创建的对象进行实例化m_pRecordset.CreateInstance("ADODB.Recordset");这样也是可以的3.recordset对象的open方法的参数需要一个connection对象,在C++里,COM对象的方法参数一般都是要求Variant类型,这里要求得是connection的借口指针,GetInterfacePtr是com的智能指针类的方法
另外一种写法
m_pRecordset->Open((_variant_t)str,_variant_t((IDispatch *)(theApp.m_pConnection)),adOpenDynamic,adLockOptimistic,adCmdText);
Variant ,BSTR, SafeArray
相对应的有_variant_t,_bstr_t类封装和管理该类型