SQL数据库连接问题...
代码如下:
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




