各位大侠:
    我写了一段连接MSSQL数据库的代码,具体如下:
    bool CSQL::ConnectDB()
{
try
{
m_pConnection =_ConnectionPtr(__uuidof(Connection));
m_pCommand = _CommandPtr(__uuidof(Command));
CString conStr="Provider=SQLOLEDB.1;Server="+m_sIp;
conStr = conStr + ";DATABASE="+m_sDatabaseName+";Persist Security Info=False;User ID="+m_sUserName;
conStr = conStr +";PWD="+m_sPassWord+";Initial Catalog="+m_sDatabaseName;
m_pConnection->ConnectionString=(_bstr_t)conStr;
m_pConnection->Open("","","",adConnectUnspecified);
m_pCommand->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
} catch(_com_error e)
{
  AfxMessageBox(e.ErrorMessage());
return FALSE;

return TRUE;

}
对于数据库的管理,我采用的是连接一次,在程序正常退出时关闭连接的方法。在测试中发生了一些异常情况造成程序异常退出,下次连接数据库就连接失败了。我不知道这是什么原因,希望各位指点一下,提供一些解决方法。
我想问问一般的数据库管理策略应该是在采取每次操作(比如:添加、删除、查询等)之前打开,操作完毕后就关闭连接的方法还是我上面所说的办法更合理些,为什么?
另外,我想在程序异常退出时通过捕获异常的方法来解决我前面所述的问题,不知道是否可行,如果可行那么我应该怎么确定发生了什么异常,还有就是在异常处理中我应该怎么做(普遍的对于上面问题的处理方法)?谢谢大家!