我怎样可以断定一个数据库连接已经断掉了?
是通过返回的结果还是有其他标准可以判断?加入代码如下:
Connection * conn = CreateInstance(OLESTR("ADODB.Connection"));
Command * command = CreateInstance(OLESTR("ADODB.Command"));
command->put_ActiveConnection(conn);
command->put_CommandText("select * from lead");
command->put_CommandType(ctText);
/* 此时数据库断开了 */
HRESULT hr = command->Execute();
那我可以根据hr 的值来准确的断定是数据库连接出现了问题吗?
如果可以,那hr所表示的值是多少
如果这样不行,那还有其他的办法嘛?
是通过返回的结果还是有其他标准可以判断?加入代码如下:
Connection * conn = CreateInstance(OLESTR("ADODB.Connection"));
Command * command = CreateInstance(OLESTR("ADODB.Command"));
command->put_ActiveConnection(conn);
command->put_CommandText("select * from lead");
command->put_CommandType(ctText);
/* 此时数据库断开了 */
HRESULT hr = command->Execute();
那我可以根据hr 的值来准确的断定是数据库连接出现了问题吗?
如果可以,那hr所表示的值是多少
如果这样不行,那还有其他的办法嘛?
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open((LPCSTR)strConn,(LPCSTR)strLoginUserName,(LPCSTR)strLoginPw,NULL);
再说你的代码中也没有体现出连接数据库的代码,只是创建了一个ADODB的对象而已。这个时候怎么判断数据库有没有连接,再说ADO对象中有一个错误管理的对象,如果发生错误,比如数据库没有连接,那么就会在那个错误管理对象中检测到。
HRESULT hr;
_bstr_t bt;
BOOL m_bConnected=FALSE;
bt=(_bstr_t)"Provider=SQLOLEDB.1;Persist Security Info=False;User ID="+(_bstr_t)m_UserName+(_bstr_t)";Password="+(_bstr_t)m_UserPassword+(_bstr_t)";Initial Catalog=SQL"+(_bstr_t)";Data Source="+(_bstr_t)m_ServerName;
//+(_bstr_t)m_server;
CoInitialize(NULL); //Initialize COM
try
{
hr=m_pCon.CreateInstance(__uuidof(Connection));
ASSERT(SUCCEEDED(hr));
hr=m_pCon->Open (bt,_bstr_t(""),_bstr_t(""),adModeUnknown);
ASSERT(SUCCEEDED(hr));
//AfxMessageBox("数据库连接成功!");
m_bConnected=TRUE;
}
catch ( _com_error )
{
AfxMessageBox("数据库连接失败,请与系统管理员联系!");
}
@err,hr
能再写详细一点吗?
需要捕捉的异常是ADO中Connection对象内的Error吗?
我捕捉了,好像也不能确定是数据库连接出错!
老大,帮帮忙!如果你的方法果真可以,我可以在加100分,如果不行,我也会给你50分的
if(m_pConnect->State==adStateClosed)
AfxMessageBox("数据库已经关闭");
else
AfxMessageBox("数据库处于连接状态");