VC CDataBase异常

来源:互联网 发布:淘宝聚划算怎么抢 编辑:程序博客网 时间:2024/05/18 19:43

(摘自《Visual C++数据库开发基础与应用》这本书P196-197第7.2.3节 数据库的连接)

      在进行MFC ODBC数据库开发的时候,需要引入MFC ODBC数据库类的定义文件afxdb.h,在项目工程的StdAfx.h文件中使用include语句添加该文件,方法如下:

#include <afxdb.h>

       建立数据库的连接之前需要定义一个CDataBase对象,代码如下:CDataBase m_db;

利用CDataBase类的OpenEx函数建立和数据库的连接。函数的原型如下:

virtual BOOL OpenEx( LPCTSTR lpszConnectString, DWORDdwOptions = 0 );
throw( CDBException, CMemoryException );

其中,lpszConnectString是ODBC的连接字符串,连接字符串包含数据源名称、用户名和用户密码。格式为"DSN=Server_Source;UID=123;PWD=abc”,DSN代表ODBC数据源名称,UID代表数据库用户名,PWD代表数据库用户密码。

对于配置的ODBC数据源的MISDB,用户名和用户密码均为dbattend的ODBC连接字符串的格式为"DSN=MISDB;UID=dbattend;PWD=dbattend”。利用CDatabase类的OpenEx函数建立数据库连接的代码如下:

//创建连接字符串

CString strConnect;
   strConnect.Format("DSN=%s;UID=%s;PWD=%s","MISDB","dbattend","dbattend");

//打开数据库的连接,并且捕获异常

TRY{

m_db.OpenEx(strConnect,CDatabase::noOdbcDialog);

}

CATCH(CDBException,ex)//处理数据库异常

{

AfxMessageBix(ex->m_strError);

AfxMessageBix(ex->m_strStateNativeOrigin);

}

AND_CATCH(CMemoryException,pEx)   //处理内存异常

{

pEx->ReportError();

AfxMessageBox("memory exception");

}

AND_CATCH(CException,e)    //处理其他异常

{

TCHAR szError[100];

e->GetErrorMessage(szError,100);

AfxMessageBox(szError);

}

END_CATCH

    从OpenEx函数的原型中可以看出OpenEx函数可能会抛出CDBException和CMemoryException异常,这些异常必须处理。MFC ODBC数据库类的许多函数在调用时都可能出现异常,可用TRY、CATCH、AND_CATCH、END_CATCH等异常处理宏捕捉并处理这些异常,否则发生异常时,程序会不正常终止,给用户带来不便,甚至带来一定的损失。