CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

连接数据库???

楼主l_y_s0796(冷雪)2006-05-04 10:11:05 在 VC/MFC / 数据库 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:l_y_s0796

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo