
先照下面这个教程的前两步设置好,然后就能调用_ConnectionPtr、_RecordsetPtr和_CommandPtr三个
指针。_ConnectionPtr是用来建立连接的;_RecordsetPtr是用来对数据库
记录集进行
*** 作的,记录集说白了就是数据库的一个小的副本,你不能直接 *** 作数据库,所有的 *** 作都是差野对记录集 *** 作,然后更新,就反应到数虚斗喊据库上边了;_CommandPtr还没用过,一般前两个就够销辩了。这几个指针虽然还算方便,但是比较繁琐的,我从一本书上找到了几个类将这几个指针重新封装了一下,使用起来更方便了。这本书是《多层结构的数据库应用系统的开发:VC6.0+CSocket+ADO+SQL server 》,书里讲的更详细。下面是我写的一个例子,不太好,你就参考一下吧。头文件.hCSbtAdoCnn m_AdoCnn //_ConnectionPtr的封装CSbtAdoRst m_AdoRst //_RecordsetPtr的封装源文件.cpp//数据库 *** 作CString strSource = m_AdoExc.GetStrSource() //连接字符串获取,可以直接写,后边那个函数请忽视CString strUser = m_AdoExc.GetStrUser() //用户名获取CString strPwd = m_AdoExc.GetStrPwd() //密码获取CString strSQL //SQL命令,决定了打开什么样的记录集CSbtStrArr m_FieldValues //CSbtStrArr是将CStringArray重新封装的一个类,m_FieldValues用存记录集的一行数据m_AdoCnn.Open(strSource, strUser, strPwd) //先建立连接strSQL = "SELECT * FROM mydatabase"m_AdoRst.Open(//这几个参数参见CSbtAdoRst里的说明m_AdoCnn.GetCnnPtr(),strSQL,adOpenStatic,adLockOptimistic,adCmdText)m_AdoRst.MoveFirst() //移到ado记录集第一行while(!m_AdoRst.IsEOF()){m_AdoRst.GetFieldsValue(m_FieldValues) //取得一行记录//------------------------------------------//你的 *** 作//==========================m_AdoRst.MoveNext() //移到下一行}m_AdoRst.Close()m_AdoCnn.Close()_RecordsetPtr&GetRecordSet(_bstr_t bstrSQL)//这里是什么意思呢,指针的地址取的是???
这个是返回一个引用..GetRecordSet这个函数的返回值是一个_RecordsetPtr类型的引用..最好这个函数不要这样写.写成
void GetRecordSet(_bstr_t bstrSQL,_RecordsetPtr&rst)
在调用前声明一个_RecordsetPtr的变量rst
然后这样调用 GetRecordSet(sql,rst)
数据集就被填充到rst里面了.返回_RecordsetPtr类型很容易出错
_bstr_t好象是个32位无符号字符串指针
评论列表(0条)