版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/* 模块名称:数据库操作类; 实现功能:提供接口,实现数据的索引,和操作。研究人员:长寿梦; 最后更新:2010-05-12预先操作: 【1】在 stdafx.h 中添加 #import C:Program FilesCommon FilesSystemadomsado15.dll no_nam espace rename(EOF,adoEOF) 【2】在主进程的 InitInstance()中添加 if(!AfxOleInit() AfxMessageBox(OLE 初始化错误); return FALSE; 【3】在.cpp 文件中要包含CPFile.h*/*CPFile.h*/clas
2、s CPDatapublic: /默认初始化构造函数CPData(); /传入连接的构造函数 CPData(_ConnectionPtr pConnection); /析构函数 virtual CPData(); public: /连接数据库 BOOL Connect(CString strUser,CString strPassword,CString strFileName=Co nnectionParam.udl,int nOptions=-1,CString strConStr=Provider=sqloledb.1;Dat a Source=(local);Database=VLan
3、); /关闭数据库的连接void DisConnect(); /数据库查询语句,用来对数据库的各种字段进行查询 / 如果成功返回 TRUE, 否则返回 FALSE. 查询的结果存储在类的共有成员变量m_pRecordset 中 /查询结果的行数和列数分别保存在共有成员变量 m_nResultRow 和 m_nResultCol 中 BOOL Select(CString strSql); /查询语句,负责对仅仅查询一个字段的情况进行处理 /结果存放在 CStringArray 类型的变量 pResult 中 BOOL Select(CString strSql,CStringArray& Re
4、sult); /对多个字段进行查询 BOOL SelectMulitCol(CString strSql,CStringArray& Result); /打开表 BOOL OpenTable(CString strTable); /打开表 BOOL OpenTable(CString strTable,CStringArray& Result); /进行其它的更新操作 BOOL Execute(CString strSql); public: BOOL ExecuteTrans(CStringArray& aSql); /关闭结果集合 void CloseRecordset(); /得到操作结
5、果的列数long GetResultCol(); /得到操作结果的条数long GetResultRow(); /得到操作结果 _RecordsetPtr GetResult(); private: /数据库操作返回的结果条数long m_nResultRow; /返回的_RecordsetPtr 中列数 long m_nResultCol; /连接指针 _ConnectionPtr m_pConnection; /命令执行指针 _CommandPtr m_pCommand; /结果集指针 _RecordsetPtr m_pRecordset;/* CPFile.cpp*/ / 构造函数/ /
6、默认的构造函数CPData:CPData() /初始化 m_nResultRow = 0; m_nResultCol=0; m_pConnection = NULL; /创建对象 m_pRecordset.CreateInstance(_uuidof(Recordset); m_pCommand.CreateInstance(_uuidof(Command);/传入参数的构造函数CPData:CPData(_ConnectionPtr pConnection) m_pConnection = pConnection; m_nResultRow = 0; m_nResultCol=0; /创建对
7、象 m_pRecordset.CreateInstance(_uuidof(Recordset); m_pCommand.CreateInstance(_uuidof(Command);/ / 析构函数/ / CPData:CPData() if(m_pRecordset-State!=adStateClosed) m_pRecordset-Close(); m_pRecordset = NULL; if(m_pCommand-State!=adStateClosed) m_pCommand-Release(); m_pCommand = NULL; if(m_pConnection-Stat
8、e!=adStateClosed) m_pConnection-Close(); m_pConnection = NULL;/ /简单操作函数/ /得到操作结果的行数long CPData:GetResultRow() return this-m_nResultRow;/得到操作结果的列数long CPData:GetResultCol() return this-m_nResultCol;/得到操作结果_RecordsetPtr CPData:GetResult() return this-m_pRecordset;/ /连接操作/ /连接到数据库/1.连接字符串可以自己构造,也可以从文件中
9、读出BOOL CPData:Connect(CString strUser,CString strPassword,CString strFileName, i nt nOptions,CString strConStr) try m_pConnection.CreateInstance(uuidof(Connection); HRESULT hr; /如果用文件方式配置数据源,进行配置 if(strFileName.Compare()!=0&CPFile:IsFileExist(strFileName) CString con = File Name=+strFileName; m_pCon
10、nection-ConnectionString =(_bstr_t)con; hr=m_pConnection-Open(,nOptions); else /自己配置连接字符串 m_pConnection-ConnectionString = (_bstr_t)strConStr; hr=m_pConnection-Open(,_bstr_t(strUser),_bstr_t(strPassword),nOptions); /进行连接/连接失败 if(FAILED(hr) AfxMessageBox(连接失败!); return FALSE; catch(_com_error&e) AfxM
11、essageBox(e.Description()+B); return FALSE; return TRUE;/断开连接void CPData:DisConnect() if(m_pConnection-State!=adStateClosed) m_pConnection-Close();/ / /更新操作/ / BOOL CPData:Execute(CString strSql) try _variant_t vNULL; vNULL.vt = VT_ERROR; /定义为无参数 vNULL.scode = DISP_E_PARAMNOTFOUND; /非常关键的一句,将建立的连接赋值
12、给它 m_pCommand-ActiveConnection = m_pConnection; /命令字串 m_pCommand-CommandText = (_bstr_t)strSql; /执行命令,取得记录集 m_pRecordset = m_pCommand-Execute(&vNULL,&vNULL,adCmdText); /确实,vNULL 中的 intVal 是执行操作所影响的行数 m_nResultRow = 0; m_nResultRow = vNULL.intVal; catch(_com_error&e) m_nResultRow = 0; return FALSE; r
13、eturn TRUE;/ / /查询操作/ / BOOL CPData:Select(CString strSql) try m_nResultCol=0; m_nResultRow=0; m_pRecordset-CursorLocation=adUseClient;/设置游标位置,设置为客户端形式,否则 GetRecordCount()返回值不对 m_pRecordset-Open(_variant_t(strSql),_variant_t(IDispatch *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
14、m_nResultCol = m_pRecordset-Fields-GetCount(); /得到查询结果的列数 m_nResultRow = m_pRecordset-GetRecordCount(); /得到查询结果的行数 catch(_com_error&e) AfxMessageBox(e.Description()+D); return FALSE; return TRUE;/查询语句,负责对仅仅查询一个字段的情况进行处理/结果存放在 CStringArray 类型的变量 pResult 中BOOL CPData:Select(CString strSql,CStringArray
15、& Result) if(Select(strSql)!=0) Result.RemoveAll(); for(int i=0;iFields-Item(long)0-Value; if(value.vt=3|value.vt=14) CString strTrans; strTrans.Format(%ld,Val); Result.Add(strTrans); else Result.Add(value.bstrVal);/ m_pRecordset-MoveNext(); m_pRecordset-Close(); return TRUE; else m_pRecordset-Close
16、(); return FALSE; BOOL CPData:SelectMulitCol(CString strSql,CStringArray& Result) if(Select(strSql)!=0) Result.RemoveAll(); _variant_t value; for(int i=0;im_nResultRow;i+) for(int j=0;jValue;value=m_pRecordset-Fields-Item( long)(/*i*m_nResultCol+*/j)-if(value.vt=3|value.vt=14)CString strTrans; strTr
17、ans.Format(%ld,Val); Result.Add(strTrans); else if(value.vt=7) COleDateTime time = value.date; CString strTemp; strTemp.Format(%d-%d-%d %s,time.GetYear(),time.GetMon th(),time.GetDay(),time.Format(%H:%M:%S); Result.Add(strTemp); else Result.Add(value.bstrVal);/ m_pRecordset-MoveNext(); m_pRecordset-
18、Close(); return TRUE; else m_pRecordset-Close(); return FALSE; /打开整张表BOOL CPData:OpenTable(CString strTable) try m_nResultCol=0; m_nResultRow=0; m_pRecordset-CursorLocation=adUseClient;/设置游标位置,设置为客户端形式,否则 GetRecordCount()返回值不对 m_pRecordset-Open(_variant_t(strTable),_variant_t(IDispatch *)m_pConnecti
19、on,true),adOpenDynamic,adLockOptimistic,adCmdTable); m_nResultCol = m_pRecordset-Fields-GetCount(); /得到查询结果的列数 m_nResultRow = m_pRecordset-GetRecordCount(); /得到查询结果的行数 catch(_com_error&e) AfxMessageBox(e.Description()+E); return FALSE; return TRUE;BOOL CPData:OpenTable(CString strTable,CStringArray&
20、 Result) if(OpenTable(strTable)!=0) Result.RemoveAll(); _variant_t value; for(int i=0;im_nResultRow;i+) for(int j=0;jValue;value=m_pRecordset-Fields-Item( long)(/*i*m_nResultCol+*/j)-if(value.vt=3|value.vt=14)CString strTrans; strTrans.Format(%ld,Val); Result.Add(strTrans); else if(value.vt=7) COleDateTime time =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育馆项目高大模板支撑专项方案
- 架空线路施工方案(完整版)(完整版)
- 2026年中国古代文学常识与历史事件知识测试题集
- 2026年中国邮政南通分公司校招职能类岗位面对批评建议题
- 2026年大学后勤物业管理岗招聘专业技能测试模拟
- 2026年建筑装饰装修技术与材料知识测试题库
- 2026年前厅服务技能竞赛沟通应变与系统操作题库
- 2026年政治常识与国家治理智慧AI出题指南
- 企业人员绩效考核方案与模板
- 羽毛球馆能源消耗统计分析手册
- 2026江西南昌市湾里管理局梅岭镇向阳林场面向社会招聘1人笔试参考题库及答案详解
- 2026年甘肃省兰州大学管理人员、其他专业技术人员招聘10人考试备考题库及答案解析
- 2026年市场监管局消费者权益保护岗面试题
- 恒丰银行笔试题库及答案
- 《导游实务》课件-6.1出境旅游领队服务程序
- 个人查摆问题清单和整改措施
- 架空配电线路及设备运行规程
- GB/T 2484-2023固结磨具形状类型、标记和标志
- 苏泊尔电磁炉标准板电路分析
- 五行称命书--源自唐朝手抄本(檀香四逸)
- 失血性休克的诊治麻醉病例讨论
评论
0/150
提交评论