ado连接oracle的语句是
CString csConnectionString="Provider=MSDAORA.1;Password="+password+";User ID="+user+";Data Source="+instance+";Persist Security Info=True";
hr = g_Connection->Open((_bstr_t)csConnectionString,(_bstr_t)"",(_bstr_t)"",-1);使用这样的方式,是可以正常连接数据库并对数据库进行操作的
但是当网线拔掉之后,重新插入网线,程序中所有使用ado进行数据操作的操作全部失败,请问这时为什么
谢谢
CString csConnectionString="Provider=MSDAORA.1;Password="+password+";User ID="+user+";Data Source="+instance+";Persist Security Info=True";
hr = g_Connection->Open((_bstr_t)csConnectionString,(_bstr_t)"",(_bstr_t)"",-1);使用这样的方式,是可以正常连接数据库并对数据库进行操作的
但是当网线拔掉之后,重新插入网线,程序中所有使用ado进行数据操作的操作全部失败,请问这时为什么
谢谢
解决方案 »
- 什么图像处理方法可以对连续区域进行标记?
- 画图
- 在VC++中怎么释放access数据库中的图片
- 如果要开发一个程序给所有的语言使用,除了ACTIVEX或者COM还有别的选择吗
- 现无英语四级证书,今后可否获得上海户口?
- 如何使自己的程序运行时候,隐藏任务栏,并且不能是自己的程序最小化,除非自定义的组合键,否则一直在前台运行?
- 看大家这么累,我来个简单的问题,来者有分马上揭贴
- 超简单问题。
- 一个小问题帮我解答一下,谢谢
- 一个新手遇到的特别难的问题!好心的人请回答我,帮助我!
- 自己写打开文件浏览框,想把"打开"改为"确定"或者是"删除".帮帮忙!!!
- CTreeCtrl如何实现CheckBox的三种状态?(不选中\全部选中\部分选中)
应当释放该实例,并重新createinstance一个实例,并open指定连接
2。与数据库服务器之间的网络发生中断以下异常发生在如上两种情况。首先会捕获到如下异常,此异常是在我周期性使用select查询时,发生了如上两种情况。
此异常可判断为到数据库服务器的连接发生中断
Error number: 80004005
[DBNETLIB][ConnectionWrite (send()).]一般性网络错误。请检查网络文档。
SQLState : 08S0
NativeError : b接下来,pConn->Close,并重新Open连接会发生如下异常,此异常是重新连接时抛出的。此时可判断为到远程服务器的连接完全中断Error number: 80004005
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。
SQLState : 08001
NativeError : 11处理这个问题,可以在捕获以上异常之后,不断地进行pConn->Open....,这里我纠正一下自己的一个错误,我曾经提到的要释放之前Connection实例,并重新CreateInstance,其实这种情况可以无需这样做,仅仅需要关闭发生异常的链接对象,然后重新Open捕获异常的代码如下,此代码的部分参考自ADO手册,并加以部分的修改
for(;;)
{
try
{
if (isConnected)
{
pRs->Open(_bstr_t(sql),
_variant_t((IDispatch *)pConn,true),
adOpenStatic,
adLockReadOnly,
adCmdText);
TRACE("Connection State = %d \n",pConn->State);
if (pRs)
if (pRs->State == adStateOpen)
pRs->Close();
}
else
{
if (pConn)
if (pConn->State == adStateOpen)
pConn->Close();
pConn->Open (_bstr_t(strCnn),_bstr_t(""),_bstr_t(""),adModeUnknown);
isConnected=TRUE;
} }
catch (_com_error &pCome)
{ _variant_t vtConnect = (_variant_t)(pConn.GetInterfacePtr());//pRs->GetActiveConnection(); // GetActiveConnection returns connect string if connection
// is not open, else returns Connection object.
switch(vtConnect.vt)
{
case VT_BSTR:
PrintComError(pCome);
break;
case VT_DISPATCH:
PrintProviderError(vtConnect);
break;
default:
printf("Errors occured.");
break;
} isConnected= FALSE;
} Sleep(1000);
}///////////////////////////////////////////////////////////
// //
// PrintProviderError Function //
// //
///////////////////////////////////////////////////////////void PrintProviderError(_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL; if( (pConnection->Errors->Count) > 0)
{
long nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = pConnection->Errors->GetItem(i);
TRACE("Error number: %x\n%s\n", pErr->Number,
(LPCSTR) pErr->Description);
TRACE("SQLState : %s\n", (LPCTSTR)pErr->SQLState);
TRACE("NativeError : %x\n", pErr->NativeError);
}
}
}///////////////////////////////////////////////////////////
// //
// PrintComError Function //
// //
///////////////////////////////////////////////////////////void PrintComError(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description()); // Print Com errors.
TRACE("Error\n");
TRACE("\tCode = %08lx\n", e.Error());
TRACE("\tCode meaning = %s\n", e.ErrorMessage());
TRACE("\tSource = %s\n", (LPCSTR) bstrSource);
TRACE("\tDescription = %s\n", (LPCSTR) bstrDescription);
}