MFC中用Ado连接数据库.doc_第1页
MFC中用Ado连接数据库.doc_第2页
MFC中用Ado连接数据库.doc_第3页
MFC中用Ado连接数据库.doc_第4页
MFC中用Ado连接数据库.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MFC中用Ado连接数据库2008-05-09 17:59分类:计算机编程 字号: 大大 中中 小小 VC+中使用MFC通过ADO连接数据库方法小结(不包括异常的捕捉)这里主要讲MFC与SQL2000数据库的连接。1.在StdAfx.h头文件中加入此句子#import c:program filescommon filessystemadomsado15.dllno_namespace rename(EOF,adoEOF)2.在App类的InitInstance()函数中加入:CoInitialize(NULL);/表示com库的初始化鼠标右键点击App类名添加虚函数ExitInstance() ,在其中加入代码:CoUninitialize();/释放com库。3.获取连接字符串。 最简单的方法就是新建一个.txt文件,将其后缀名改为.udl,双击它,在“提供程序”标签页中选择“Microsoft OLE DB Provide fo Sql Server”,然后在“连接”标签页选择填写服务器、数据库、登陆方式等信息,最后按“确定”。连接完成之后,将其用写字板打开,第三行信息,如“Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=RuleDB_Data;Data Source=PYE”即为连接字符串。注意,若数据库位于本机,在选择填写服务器一栏可直接填写(local),记得一定要加括号。4.连接数据库 在这里引入一个编写好的封装类:ADOConn。该类封装了连接数据库,对数据库进行添加、删除、修改操作及获取查询记录集操作的方法。用户可直接使用,这个类的头文件和cpp文件内容将在本文最后给出。 在一个工程里加入该类的方法为:把该类的头文件和cpp文件拷贝到工程所在的文件夹里。 然后在工程的工作区选择Project-Add to Project-Files,将这两个文件选择加入。 之后,就可以在程序里应用这个类了。 首先在要用到数据库的类的头文件里设一个该类的对象,即加入代码:ADOConn m_Ado;注意:记得要先在最前面加入#include ADOConn.h。 在应用这个对象对数据库进行操作之前,先对其初始化:m_Ado.OnInitADOConn(strConnect);其中strConnect即为上面获取的连接字符串。 若要获取数据库中的部分记录集,用m_Ado.GetRecordSet(strSql);其中strSql中存放查询语句,查询结果存放于m_Ado.m_pRecordset中,然后可用GetCollect()函数挨个获取所有符合条件的记录的各个字段的值。用完后记得用m_Ado.m_pRecordset.Close()关闭记录集。 添加、修改、删除操作,均用m_Ado.ExecuteSQL(strSql);语句完成。此外,若同时需要多种记录集,则还需在要用到数据库的类的头文件里添加记录集的对象,即_RecordsetPtr m_pRecordset; m_pRecordset在用之前也需初始化,初始化语句为:m_pRecordset.CreateInstance(_uuidof(Recordset);,同样的,每回记录集用完之后也得用Close()函数关闭。5.若在数据库应用程序编译时遇到102个错误,则可把Debug文件夹删了重新编译即可。ADOConn类的头文件:#if !defined(AFX_ADOCONN_H_2B491720_FA04_4800_B616_219E55ABEA46_INCLUDED_)#define AFX_ADOCONN_H_2B491720_FA04_4800_B616_219E55ABEA46_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000class ADOConn : public CObject public:/添加一个指向Connection对象的指针:_ConnectionPtr m_pConnection;/添加一个指向Recordset对象的指针:_RecordsetPtr m_pRecordset;char error1024;public:_ConnectionPtr& GetConnPtr() return m_pConnection;_RecordsetPtr& GetRecoPtr() return m_pRecordset;public:/事务回滚BOOL RollbackTrans();/递交 事务BOOL CommitTrans();/事务开始BOOL BeginTrans();BOOL adoBOF();/头BOOL adoEOF();/尾BOOL MoveNext();/下一个BOOL CloseTable();/关闭表BOOL CloseADOConnection();/关闭连接BOOL GetCollect(LPCTSTR Name,CString &lpDest);/获取某个字段的值/执行SQL语句 包含update delete insertBOOL ExecuteSQL(LPCTSTR lpszSQL);/初始化连接数据库BOOL OnInitADOConn(LPCTSTR ConnStr);/ 执行select语句 获取记录集 _RecordsetPtr& GetRecordSet(LPCTSTR lpszSQL);ADOConn();virtual ADOConn();#endif / !defined(AFX_ADOCONN_H_2B491720_FA04_4800_B616_219E55ABEA46_INCLUDED_)class CADOException : public CException public:/ ConstructorCADOException(char* pchMessage);public:CADOException() CString m_strMessage;virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError,PUINT pnHelpContext = NULL);private:int m_nError;ADOConn类的cpp文件:#include stdafx.h#include ADOConn.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/ADOConn:ADOConn()memset(error,0,1024);ADOConn:ADOConn()/ CADOException Class/ Construction/Destruction/CADOException:CADOException(char* pchMessage)m_strMessage = pchMessage;m_nError = GetLastError();BOOL CADOException:GetErrorMessage(LPTSTR lpstrError, UINT nMaxError,PUINT pnHelpContext /*= NULL*/)char text200;if(m_nError = 0) wsprintf(text, %s error, (const char*) m_strMessage);else wsprintf(text, %s error #%d, (const char*) m_strMessage, m_nError);strncpy(lpstrError, text, nMaxError - 1);return TRUE;BOOL ADOConn:OnInitADOConn(LPCTSTR ConnStr):CoInitialize(NULL);try/ 创建Connection对象m_pConnection.CreateInstance(ADODB.Connection);/ 设置连接字符串,必须是BSTR型或者_bstr_t类型_bstr_t strConnect = _bstr_t(ConnStr);/Provider=SQLOLEDB; Server=127.0.0.1;Database=EventLogg; uid=event; pwd=event;m_pConnection-Open(strConnect,adModeUnknown);return TRUE;/ 捕捉异常catch(_com_error e)/ 显示错误信息TRACE(e.Description();/sprintf(error,连接数据库失败 请检查连接字符串rn当前连接字符串为:%s,ConnStr);/throw new CADOException(error);throw new CADOException(连接数据库失败);/执行SQL语句 包含update delete insertBOOL ADOConn:ExecuteSQL(LPCTSTR lpszSQL)/_variant_t RecordsAffected;try/ Connection对象的Execute方法:(_bstr_t CommandText, / VARIANT * RecordsAffected, long Options ) / 其中CommandText是命令字串,通常是SQL命令。/ 参数RecordsAffected是操作完成后所影响的行数, / 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名/ adCmdProc-存储过程;adCmdUnknown-未知m_pConnection-Execute(_bstr_t(lpszSQL),NULL,adCmdText);return true;catch(_com_error e)TRACE(e.Description();/sprintf(error,t执行SQL语句失败rn SQL语句为:%s,lpszSQL);/throw new CADOException(error);throw new CADOException(执行SQL语句失败);/执行SELECT语句,获得结果集,结果集放在m_pRecordset中_RecordsetPtr& ADOConn:GetRecordSet(LPCTSTR lpszSQL)try/ 创建记录集对象m_pRecordset.CreateInstance(_uuidof(Recordset);/ 取得表中的记录m_pRecordset-Open(_bstr_t(lpszSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);/ 捕捉异常catch(_com_error e)/ 显示错误信息TRACE(e.Description();/sprintf(error,t执行SELECT语句失败rnSELECT语句为:%s,lpszSQL);/throw new CADOException(error);throw new CADOException(执行SELECT语句失败);/ 返回记录集return m_pRecordset;/获取某个字段的值BOOL ADOConn:GetCollect(LPCTSTR Name,CString &lpDest)VARIANT vt;tryvt = m_pRecordset-GetCollect(Name);/*_bstr_t bstr = (_bstr_t)vt;if(lpDest != )strcpy(lpDest,bstr);*/if(vt.vt!=VT_NULL)lpDest=(LPCSTR)_bstr_t(vt);elselpDest=;catch (_com_error e)TRACE(e.Description();sprintf(error,获取字段:%s值失败,Name);throw new CADOException(error);return TRUE;/关闭数据库 BOOL ADOConn:CloseADOConnection()trym_pConnection-Close();catch (_com_error e)TRACE(e.Description();sprintf(error,e.Description();throw new CADOException(关闭数据库失败);return TRUE;/关表BOOL ADOConn:CloseTable()trym_pRecordset-Close();catch (_com_error e)TRACE(e.Description();sprintf(error,e.Description();throw new CADOException(关闭表失败);return TRUE;/下一个BOOL ADOConn:MoveNext()trym_pRecordset-MoveNext();catch (_com_error e)TRACE(e.Description();sprintf(error,e.Description();throw new CADOException(结果集移向下一个失败);retur

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论