连接数据库???
void CcmppSocket::ConentDB()//连接数据库
{
char szPath[256];char szTmp[128];
strcpy(szPath,"FILE NAME=");
::GetCurrentDirectory(256,szTmp);
strcat(szTmp,"\\");//
strcat(szTmp,"link.udl");//
strcat(szPath,szTmp);
::CoInitialize(0);
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->CursorLocation = adUseClient;
m_pConnection->ConnectionString = _bstr_t( szPath);//(LPTSTR)(LPCTSTR)
m_pConnection->ConnectionTimeout= 60;
HRESULT hr;
try
{
hr = m_pConnection->Open("",
"","",adConnectUnspecified);
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordsetMSGID.CreateInstance(_uuidof(Recordset));
}
catch(...)
{
AfxMessageBox("数据库链接失败");
}
::CreateThread(0,0,RunActiveConnection,this,0,0); // 数据链路检查
}
unsigned long _stdcall CcmppSocket::RunActiveConnection(void *lpvoid)///11
{
CcmppSocket * pThis=(CcmppSocket* )lpvoid;
pThis->ActiveConnectionDB();
return 0;
}
void CcmppSocket::ActiveConnectionDB()//12
{
int nWaitTime=0;
CString sp_ActiveDB;
sp_ActiveDB="spActiveDB3";//spActiveDB3是个空的存储过程
int nActiveTime = 10/3 ;
printf("启动数据链路检查!\n");
while(1)
{
Sleep(3000);
if(nWaitTime++ >= nActiveTime ) //3秒进行链路检测
{
nWaitTime=0;
try
{
m_pConnection->Execute((LPTSTR)(LPCTSTR)sp_ActiveDB,0,0);
}
catch(...)
{
try
{
m_pConnection->Close();
m_pConnection->Open("","","",adConnectUnspecified);
}
catch(...)
{ }
}
}
}
}
以上是我连接SQL SERVER 2000数据库的方法,以下是我扫描数据库表的方法,程序执行到一定时间就扫描不到数据库表DMSend里的数据了,要把程序关掉,再打开,才能扫描数据库里的数据
void CcmppSocket::Scand()
{
sql.Format("select * from dbo.DMSend");
try
{
bSTR=sql.AllocSysString();
m_pRecordset->Open(bSTR,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch (_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
if(m_pRecordset->adoEOF)
{m_pRecordset->Close();
//printf("数据库为空!");
SysFreeString(bSTR);
return;
}
else
{
pValue=m_pRecordset->GetCollect("id");
..................
m_pRecordset->Close();
SysFreeString(bSTR);
}
}
main()
{
...
while(1)
{
cmpp.ScandDB();
Sleep(1000);}
}
这个问题困了我好长时间了,请大家帮帮我!!!!小弟在此先谢谢大家了
问题点数:20、回复次数:2Top
1 楼mynamelj(风之羽翼)回复于 2006-05-04 12:55:47 得分 0
连接字符串怎么会是一个本地路径加一个文件名(link.udl)呢,郁闷,不解楼住在搞什么东东!Top
2 楼mynamelj(风之羽翼)回复于 2006-05-04 12:57:16 得分 0
而且在多线程使用com的话,不能用CoInitialize,应该使用CoInitializeEx来初始化Top




