SQL数据库连接问题...

wulu2010 2006-09-11 10:59:06
代码如下:
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;
为什么运行是总是连接不上.啊..各位帮帮忙啊.
...全文
1146 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lshddd 2006-09-11
  • 打赏
  • 举报
回复
你能说一下你创建工程的步骤吗。
一般来说,我用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盘,那就要改路径了
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
已经导入了MSADO15.DLL,为什么初始化会失败呢?(debug assertion Failed)
sdl2005lyx 2006-09-11
  • 打赏
  • 举报
回复
lz:
你用下面的方法:

HRESULT hr;
hr = m_pConnection.CreateInstance(__uuidof(Connection));
hr = m_pConnection->Open((LPCTSTR)m_strCn, L"", L"", adCmdUnspecified);

你直接单步看hr的值,看是不是第一步就出错了???
lshddd 2006-09-11
  • 打赏
  • 举报
回复
你导入了msado15.dll了吗
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
在创建项目的时候选择了数据库是否就不能这样做了呢?
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
(sdl2005lyx)说的没错.的确是没初始化,但加上初始化后出现错误在file:oleinit.cpp
sdl2005lyx 2006-09-11
  • 打赏
  • 举报
回复
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;
}
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
(sdl2005)的方法 LPCTSTR 不能自动转换成 _variant_t 第一个参数
sdl2005lyx 2006-09-11
  • 打赏
  • 举报
回复
lz:你初始化ado组件没有:

if(!AfxOleInit())
{
AfxMessageBox("Component Initialize error!");
return FALSE;
}
sdl2005lyx 2006-09-11
  • 打赏
  • 举报
回复
m_pConnection->Open((LPCTSTR)strCn, L"", L"", adCmdUnspecified);

应该没问题。
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
照(ishddd)的方法运行后 还是显示错误:IDispatch error #3149这是什么错误呢?
lshddd 2006-09-11
  • 打赏
  • 举报
回复
m_pConnection->Open(_bstr_t(bcnstr),"","",-1);//adOpenUnspecified
试一下
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
thank you! (Ishddd)你的连接串成功连接了.
lshddd 2006-09-11
  • 打赏
  • 举报
回复
provider={SQLOLEDB};好像不能有大括号的。。。。。。。。。。
一条晚起的虫 2006-09-11
  • 打赏
  • 举报
回复
provider={SQLOLEDB} //这个接口没有找到?
provider=SQLOLEDB.1;
lshddd 2006-09-11
  • 打赏
  • 举报
回复
可能是provider={SQLOLEDB};的原因,是不是要空格的阿provider={SQL OLE DB};
lshddd 2006-09-11
  • 打赏
  • 举报
回复
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的问题。。。。。。。。
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
如果是未正确安装提供程序.应该怎样才能确定.
wulu2010 2006-09-11
  • 打赏
  • 举报
回复
我将strCn连接串改成如下:
strCn="provider={SQLOLEDB};server=127.0.0.1;DATABASE=pms_db;userID=xie;Password=123";
后出现错误提示:
错误源:ADODB.CONNECTION
错误描述:未找到提供程序,该程序可能未正确安装.
lshddd 2006-09-11
  • 打赏
  • 举报
回复
那就神奇了,捕抓到什么错误提示吗,贴出来讨论一下
加载更多回复(9)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧