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

SQL数据库连接问题...

楼主wulu2010()2006-09-11 10:59:06 在 VC/MFC / 数据库 提问

代码如下:  
  m_pConnection.CreateInstance("ADODB.Connection");  
    CString   strCn;  
  strCn.Empty();  
  strCn="provider=SQLOLEDB;data   source="+this->DataSource  
  +";DATABASE="+this->Catalog  
  +";userID="+this->UserID  
  +";Password="+this->Password;  
  _variant_t   bcnstr=_variant_t(strCn);  
  _variant_t   bunstr=_variant_t(this->UserID);  
  _variant_t   bpwdstr=_variant_t(this->Password);  
    //打开一个连接  
  try  
  {  
    m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr),  
  _bstr_t(bpwdstr),-1);//adOpenUnspecified  
    }  
  catch(_com_error   e)  
  {  
    CString   errormessage;  
  errormessage.Format("Warning:   连接数据库发生异常.   错误信息:   %s;   文件:   %s;   行:   %d   ",   e.ErrorMessage(),   __FILE__,   __LINE__);  
    AfxMessageBox(errormessage);  
    return   FALSE;  
  }  
  catch(...)  
  {  
    AfxMessageBox("Warning   :连接数据库时发生未知错误");  
    return   FALSE;  
  }  
  return   TRUE;  
  为什么运行是总是连接不上.啊..各位帮帮忙啊. 问题点数:20、回复次数:29Top

1 楼lshddd()回复于 2006-09-11 11:19:03 得分 20

m_pConnection->Open(_bstr_t(bcnstr),"","",-1);//adOpenUnspecified  
  试一下Top

2 楼wulu2010()回复于 2006-09-11 11:24:26 得分 0

照(ishddd)的方法运行后   还是显示错误:IDispatch   error   #3149这是什么错误呢?Top

3 楼sdl2005lyx()回复于 2006-09-11 11:28:14 得分 0

m_pConnection->Open((LPCTSTR)strCn,   L"",   L"",   adCmdUnspecified);  
   
  应该没问题。Top

4 楼sdl2005lyx()回复于 2006-09-11 11:32:44 得分 0

lz:你初始化ado组件没有:  
   
  if(!AfxOleInit())  
  {  
  AfxMessageBox("Component   Initialize   error!");  
  return   FALSE;  
  }Top

5 楼wulu2010()回复于 2006-09-11 11:35:17 得分 0

(sdl2005)的方法   LPCTSTR   不能自动转换成   _variant_t   第一个参数Top

6 楼sdl2005lyx()回复于 2006-09-11 11:39:50 得分 0

lz:没有问题,它的第一个原始参数类型是_bstr_t的参数,不是_variant_t  
   
  inline   HRESULT   Connection15::Open   (   _bstr_t   ConnectionString,   _bstr_t   UserID,   _bstr_t   Password,   long   Options   )   {  
          HRESULT   _hr   =   raw_Open(ConnectionString,   UserID,   Password,   Options);  
          if   (FAILED(_hr))   _com_issue_errorex(_hr,   this,   __uuidof(this));  
          return   _hr;  
  }Top

7 楼wulu2010()回复于 2006-09-11 11:40:41 得分 0

(sdl2005lyx)说的没错.的确是没初始化,但加上初始化后出现错误在file:oleinit.cppTop

8 楼wulu2010()回复于 2006-09-11 11:45:25 得分 0

在创建项目的时候选择了数据库是否就不能这样做了呢?  
  Top

9 楼lshddd()回复于 2006-09-11 11:47:22 得分 0

你导入了msado15.dll了吗  
  #import   "c:\program   files\common   files\system\ado\msado15.dll"   no_namespace   rename("EOF","adoEOF")Top

10 楼sdl2005lyx()回复于 2006-09-11 11:47:46 得分 0

lz:  
      你用下面的方法:  
   
  HRESULT   hr;  
  hr   =   m_pConnection.CreateInstance(__uuidof(Connection));  
  hr   =   m_pConnection->Open((LPCTSTR)m_strCn,   L"",   L"",   adCmdUnspecified);  
   
  你直接单步看hr的值,看是不是第一步就出错了???  
  Top

11 楼wulu2010()回复于 2006-09-11 11:56:46 得分 0

已经导入了MSADO15.DLL,为什么初始化会失败呢?(debug   assertion   Failed)Top

12 楼lshddd()回复于 2006-09-11 12:22:48 得分 0

你能说一下你创建工程的步骤吗。  
  一般来说,我用ado的做法是:创建工程,不选任何数据库支持。  
  然后在stdafx.h文件的最后加上下面这两句  
  #include   <comdef.h>  
  #import   "c:\program   files\common   files\system\ado\msado15.dll"   no_namespace   rename("EOF","adoEOF")  
   
  然后在***app.cpp的InitInstance()函数中加上  
  if(!AfxOleInit())//这就是初始化COM库  
  {  
  AfxMessageBox("OLE初始化出错!");  
  return   FALSE;  
  }    
  就可以正常使用的了。  
   
  还有就是你先看一下MSADO15.DLL在你c盘的那个目录下面吧,如果你系统不是装在c盘,那就要改路径了Top

13 楼wulu2010()回复于 2006-09-11 14:19:44 得分 0

重新做工程后运行还是出现错误:IDispatch   error   #3149Top

14 楼sdl2005lyx()回复于 2006-09-11 14:26:22 得分 0

lz:建议你做一个简单的对话框程序,InitInstance()函数中加初始化ado组件。  
  把你的连接字符串写成常量值,再创建连接对象,再连接数据库。。。。Top

15 楼wulu2010()回复于 2006-09-11 14:56:03 得分 0

重新做过简单工程   在stdafx.h文件的最后加了下面这两句  
  #include   <comdef.h>  
  #import   "c:\program   files\common   files\system\ado\msado15.dll"   no_namespace   rename("EOF","adoEOF")  
   
  在InitInstance()函数中加上  
  if(!AfxOleInit())//这就是初始化COM库  
  {  
  AfxMessageBox("OLE初始化出错!");  
  return   FALSE;  
  }    
  之后加了::CoInitialize(NULL);  
  运行后hr   =   m_pConnection.CreateInstance(__uuidof(Connection));没错  
  hr   =   m_pConnection->Open(LPCTSTR(strCn),   L"",   L"",adCmdUnspecified);出问题#3149Top

16 楼wulu2010()回复于 2006-09-11 14:58:02 得分 0

strCn="provider=SQLOLEDB;server=UNIT-TZFYUBXLWW;DATABASE=pms_db;userID=sa;Password=";  
  我本机上的sql用户sa没设定密码Top

17 楼lfchen(一条晚起的虫--床上用品[家纺]专卖)回复于 2006-09-11 15:24:02 得分 0

#3149是未指定错误吧?  
  //AfxOleInit()   和   CoInitialize()用一个就可以了Top

18 楼lshddd()回复于 2006-09-11 15:34:33 得分 0

我帮你测试了,大概知道什么问题了。应该是帐号和密码的问题  
  catch(_com_error   e)  
  {    
   
          CString   strComError;  
        strComError.Format("错误编号:   %08lx\n错误信息:   %s\n错误源:   %s\n错误描述:   %s",  
                e.Error(),                                     //   错误编号  
                e.ErrorMessage(),                       //   错误信息  
                (LPCSTR)   e.Source(),                 //   错误源  
                (LPCSTR)   e.Description());     //   错误描述              
       
      ::MessageBox(NULL,strComError,"错误",MB_ICONEXCLAMATION);  
  }  
   
  你用上面的语句捕抓一下异常就知道了。  
   
  建议你不要用sa这个超级管理员登陆,另外起一个账号和密码试一下吧  
  Top

19 楼wulu2010()回复于 2006-09-11 15:35:29 得分 0

CoInitialize()和AfxOleInit()用一个..可是怎么老是出IDispath   error   #3149这个错误???Top

20 楼lshddd()回复于 2006-09-11 15:41:06 得分 0

server=UNIT-TZFYUBXLWW这里如果是本机最好用server=127.0.0.1   不要用那么奇怪的机器名Top

21 楼wulu2010()回复于 2006-09-11 15:43:45 得分 0

我在SQL里重新建了个用户设定密码...还是相同问题..Top

22 楼lshddd()回复于 2006-09-11 15:48:15 得分 0

那就神奇了,捕抓到什么错误提示吗,贴出来讨论一下Top

23 楼wulu2010()回复于 2006-09-11 15:51:14 得分 0

我将strCn连接串改成如下:  
  strCn="provider={SQLOLEDB};server=127.0.0.1;DATABASE=pms_db;userID=xie;Password=123";  
  后出现错误提示:  
  错误源:ADODB.CONNECTION  
  错误描述:未找到提供程序,该程序可能未正确安装.Top

24 楼wulu2010()回复于 2006-09-11 15:53:39 得分 0

如果是未正确安装提供程序.应该怎样才能确定.Top

25 楼lshddd()回复于 2006-09-11 15:55:14 得分 0

CString   strSRC;  
  strSRC="Driver=SQL   Server;Server=127.0.0.1";     ////////////sql服务器  
  strSRC+=";Database=";  
  strSRC+="myDB";                         ///////////////数据库  
  strSRC+=";UID=usename;PWD=123456";       /////////////账号和密码  
   
  _bstr_t   bstrSRC(strSRC);  
  m_pConnection   ->ConnectionTimeout   =8;  
  hr=m_pConnection   ->Open   (bstrSRC,"","",-1);  
   
  我一般写连接字符是这样写的,你看行不行吧,如果不行的话,我觉得可能是sql   2000的问题。。。。。。。。 Top

26 楼lshddd()回复于 2006-09-11 15:56:19 得分 0

可能是provider={SQLOLEDB};的原因,是不是要空格的阿provider={SQL   OLE   DB};Top

27 楼lfchen(一条晚起的虫--床上用品[家纺]专卖)回复于 2006-09-11 15:57:08 得分 0

provider={SQLOLEDB}     //这个接口没有找到?  
  provider=SQLOLEDB.1;Top

28 楼lshddd()回复于 2006-09-11 16:00:34 得分 0

provider={SQLOLEDB};好像不能有大括号的。。。。。。。。。。Top

29 楼wulu2010()回复于 2006-09-11 16:00:53 得分 0

thank   you!   (Ishddd)你的连接串成功连接了.Top

相关问题

关键词

得分解答快速导航

  • 帖主:wulu2010
  • lshddd

相关链接

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

广告也精彩

反馈

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