我在.h文件的声明
_RecordsetPtr ADOSet;
_ConnectionPtr ADOConn;我在OnInitDialog中的定义
if (FAILED(::CoInitialize(NULL)))
{
AfxMessageBox("ADO Init failed");
return false;
}
try
{
ADOConn.CreateInstance(__uuidof(Connection));
ADOConn->Open( "DSN=test","","",-1);
}
catch(_com_error &e)
{
CString err;
err.Format("%s",(char*)(e.Description()));
AfxMessageBox(err);
}
ADOSet.CreateInstance(__uuidof(Recordset));
在OnButton1()中的定义
_variant_t mm;
// TODO: Add your control notification handler code here
if (ADOSet->State==adStateOpen) ADOSet->Close();
mm="insert into t1 (name) values ('"+m_name+"')";
ADOSet->Open(mm,ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdUnknown);
为什么编译时不报错,运行时说:
Runtime error
D:\test\release\test.exe
abnormal program termination 急急急急急!!!!!
_RecordsetPtr ADOSet;
_ConnectionPtr ADOConn;我在OnInitDialog中的定义
if (FAILED(::CoInitialize(NULL)))
{
AfxMessageBox("ADO Init failed");
return false;
}
try
{
ADOConn.CreateInstance(__uuidof(Connection));
ADOConn->Open( "DSN=test","","",-1);
}
catch(_com_error &e)
{
CString err;
err.Format("%s",(char*)(e.Description()));
AfxMessageBox(err);
}
ADOSet.CreateInstance(__uuidof(Recordset));
在OnButton1()中的定义
_variant_t mm;
// TODO: Add your control notification handler code here
if (ADOSet->State==adStateOpen) ADOSet->Close();
mm="insert into t1 (name) values ('"+m_name+"')";
ADOSet->Open(mm,ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdUnknown);
为什么编译时不报错,运行时说:
Runtime error
D:\test\release\test.exe
abnormal program termination 急急急急急!!!!!
AfxInitOle();
TESTHR(pRec.CreateInstance(__uuidof(Recordset)));
pRec->CursorLocation = adUseClient;
TESTHR(pRec->Open(strSQL ,_variant_t((IDispatch *)m_pConnection,TRUE),adOpenStatic, adLockOptimistic, adCmdText));以上是通过SQL读数据
初始化是下面这段
_ConnectionPtr m_pConnection;
CoInitialize(NULL);
TESTHR(m_pConnection.CreateInstance(__uuidof(Connection)));
TESTHR(m_pConnection->Open((_bstr_t)strConnect, _T(""), _T(""), adConnectUnspecified));
其中strConnect是连接串一段用了很久的代码,试试吧
strConnect+=dbinfo.m_ip;
strConnect+=";Database=";
strConnect+=dbinfo.m_dbname;
strConnect+="; uid=";
strConnect+=dbinfo.m_user;
strConnect+="; pwd=";
strConnect+=dbinfo.m_passwd;
strConnect+=";";
_bstr_t strCon=_bstr_t(strConnect);
try
{
hr=pConn.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
{
Message("pConn连接SQL Server失败!...");
return false;
}
pConn->Open(strCon,"","",NULL);
hr=pConnTrans.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
{
Message("pConnTrans连接SQL Server失败!...");
return false;
}
pConnTrans->Open(strCon,"","",NULL);
}
catch(_com_error err)
{
Message("错误信息是:");
Message(err.ErrorMessage());
Message("错误描述是:");
Message((char *)err.Description());
Message("错误源是:");
Message((char *)err.Source());
Message("连接SQL Server 1失败!..."); g_KillThread=FALSE;
g_Thread1Killed=FALSE;
return FALSE;
}
catch(...)
{
Message("连接SQL Server 2失败...");
g_KillThread=FALSE;
g_Thread1Killed=FALSE;
return false;
}
return TRUE;
}
我上次就是退出是出现这种情况,后来把m_pConnection释放掉就没事了
m_pConnection->Close();
m_pConnection->Release();