ADO连接数据库时,显示错误【ODBC 驱动程序管理器】 数据源名称过长

时间:2022-11-28 04:39:22
各位大牛,本人菜鸟,最近做数据库课程设计时,出现这个问题一直都不能解决,请大家帮忙看看。

LPCTSTR strCon=(LPCTSTR)("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=kejie;Data Source=2012-0524-1122");
adoc.OnInitADOConn(strCon);



一下时连接类

BOOL ADOConn::OnInitADOConn(LPCTSTR ConnStr)
{
::CoInitialize(NULL);
try
{
 // 创建Connection对象
m_pConnection.CreateInstance(_T("ADODB.Connection") );
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = _bstr_t(ConnStr);    
m_pConnection->Open(strConnect,"","",adModeUnknown );
return TRUE;
}
catch(_com_error e)
{
 // 显示错误信息
TRACE( (_bstr_t)e.Description() );
AfxMessageBox(e.Description() );
//  sprintf(error,"连接数据库失败 请检查连接字符串/r/n当前连接字符串为:%s",ConnStr);
//  throw new CADOException(error);
throw new CADOException("连接数据库失败");
}
 
}

俺用的是ADO连接数据库 和那个ODBC有么事关系呢?
蛋疼中。。。

21 个解决方案

#1


你连接的是什么数据库?ODBC驱动程序 你安装了没?如果你连接的是mysql的话,你需要安装mysql-connector-odbc驱动。

#2


我连接的是server2008,我用ADO连接数据库,应该不需要ODBC驱动吧。

#3


连接字符串里:Data Source=2012-0524-1122设置有问题。
你的数据库是在哪?
如果在本地,设置Data Source=.
如果在其他服务器,设置Data Source=服务器IP,例如:Data Source=192.168.1.12

#4


这是我的server2008引擎名称,也是我安装server2008的日期,是server默认的。数据库也在我电脑上,我用.试过了,也不行,也是同样的错误。

#5


我的链接操作,是再一个button控件的消息函数里面实现的 ,不知道这个是否有问题?

ADO连接数据库时,显示错误【ODBC 驱动程序管理器】 数据源名称过长
ADO连接数据库时,显示错误【ODBC 驱动程序管理器】 数据源名称过长

#6


[img=http://user.qzone.qq.com/399035165/infocenter#!app=4][/img][img=http://user.qzone.qq.com/399035165/infocenter#!app=4][/img]

#7


哦,你是不是没有添加ADO支持啊?
代码如下:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")

#8


我加了啊 ,我贴代码给你看看。
 

#pragma once

#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
#endif

#include "targetver.h"

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的

// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS

#include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h>         // MFC 扩展


#include <afxdisp.h>        // MFC 自动化类

//#include "icrsint.h"
//#include "adoid.h"
//#include <vector>
//#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
#endif

#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持

#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
#endif

//#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF");

#9


跪求高手给个解答啊,求求啦。

#10


m_ConnectionStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=FALSE;Initial Catalog=test;Data Source=.";

这是我的链接字符串,是可以用的。用户名和密码是在下面设置的:

m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect = m_ConnectionStr.GetBuffer();
m_pConnection->Open(strConnect,"sa","123",adModeUnknown);

#11


还是不行啊。 请问那个 Integrrated Security =SSPI 是什么? 这个字符段 m_ConnectionStr你是怎么获得的?我用UDL文件连接数据库成功了,我的字符段就是从那儿获取的,为什么就不行呢?你的那个GetBuffer()函数,能否用强制类型转换得到?

还有一点就是#import。。。。是否需要
加入这两个头文件#include "icrsint.h"
#include "adoid.h"

#12


1、Integrated Security 身份验证方式 
当为false时,将在连接中指定用户ID和密码。 
当为true时,将使用当前的Windows帐户凭据进行身份验证。 
可识别的值为true、false、yes、no以及与true等效的sspi。
==============
指你使用windows自带的安全验证机制,这时你不用加uid和password也可以打开数据库 
如果你没有那一句的话,就必须在联接字符串里写上uid=sa;password=00; 
否则你不能打开数据库。
2、 m_ConnectionStr定义在代码里的,连接字符串也是写在代码里的;变量的类型为CString,GetBuffer()是CString类里的函数,你可以转化为其他类型。

3、使用#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")时,不需要加头文件的

#13


那为什么我用udl文件链接数据库 获取的那个字段木有密码呢?
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=kejie;Data Source=2012-0524-1122
我觉得这有些问题

况且,我用ADO链接应该不会和ODBC有什么问题吧 
我同学用java链接需要下ODBC驱动。。

#14


1、你先试试用sa用户能不能登录上指定的数据库。
2、你测试一下,不从文件里读连接字符串,你直接在代码里写一个字符串试试,看看能不能正常连接到数据库,连接字符串用我给你的那个!

#15


谢谢啊,我试过了,还是不行。我再等几天实在不行,我就结贴,分我还是给你啊 ,谢谢你一直来都这么支持我。

#16


呵呵,不客气,祝愿你的问题能尽快的解决!

#17


柯同学你好

#18


你好,李同学。欢迎回答我的问题。

#19


lz问题解决了没?问题关键点在哪呢?也遇到同样问题了。

#20


ADO没设置好。你可以测试一下ADO与数据库是否测试正常,然后再写其他的内容。

#21


连接好了,我试过的。这都一年前的东西了
额 

#1


你连接的是什么数据库?ODBC驱动程序 你安装了没?如果你连接的是mysql的话,你需要安装mysql-connector-odbc驱动。

#2


我连接的是server2008,我用ADO连接数据库,应该不需要ODBC驱动吧。

#3


连接字符串里:Data Source=2012-0524-1122设置有问题。
你的数据库是在哪?
如果在本地,设置Data Source=.
如果在其他服务器,设置Data Source=服务器IP,例如:Data Source=192.168.1.12

#4


这是我的server2008引擎名称,也是我安装server2008的日期,是server默认的。数据库也在我电脑上,我用.试过了,也不行,也是同样的错误。

#5


我的链接操作,是再一个button控件的消息函数里面实现的 ,不知道这个是否有问题?

ADO连接数据库时,显示错误【ODBC 驱动程序管理器】 数据源名称过长
ADO连接数据库时,显示错误【ODBC 驱动程序管理器】 数据源名称过长

#6


[img=http://user.qzone.qq.com/399035165/infocenter#!app=4][/img][img=http://user.qzone.qq.com/399035165/infocenter#!app=4][/img]

#7


哦,你是不是没有添加ADO支持啊?
代码如下:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")

#8


我加了啊 ,我贴代码给你看看。
 

#pragma once

#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
#endif

#include "targetver.h"

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的

// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS

#include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h>         // MFC 扩展


#include <afxdisp.h>        // MFC 自动化类

//#include "icrsint.h"
//#include "adoid.h"
//#include <vector>
//#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
#endif

#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持

#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
#endif

//#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF");

#9


跪求高手给个解答啊,求求啦。

#10


m_ConnectionStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=FALSE;Initial Catalog=test;Data Source=.";

这是我的链接字符串,是可以用的。用户名和密码是在下面设置的:

m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect = m_ConnectionStr.GetBuffer();
m_pConnection->Open(strConnect,"sa","123",adModeUnknown);

#11


还是不行啊。 请问那个 Integrrated Security =SSPI 是什么? 这个字符段 m_ConnectionStr你是怎么获得的?我用UDL文件连接数据库成功了,我的字符段就是从那儿获取的,为什么就不行呢?你的那个GetBuffer()函数,能否用强制类型转换得到?

还有一点就是#import。。。。是否需要
加入这两个头文件#include "icrsint.h"
#include "adoid.h"

#12


1、Integrated Security 身份验证方式 
当为false时,将在连接中指定用户ID和密码。 
当为true时,将使用当前的Windows帐户凭据进行身份验证。 
可识别的值为true、false、yes、no以及与true等效的sspi。
==============
指你使用windows自带的安全验证机制,这时你不用加uid和password也可以打开数据库 
如果你没有那一句的话,就必须在联接字符串里写上uid=sa;password=00; 
否则你不能打开数据库。
2、 m_ConnectionStr定义在代码里的,连接字符串也是写在代码里的;变量的类型为CString,GetBuffer()是CString类里的函数,你可以转化为其他类型。

3、使用#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")时,不需要加头文件的

#13


那为什么我用udl文件链接数据库 获取的那个字段木有密码呢?
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=kejie;Data Source=2012-0524-1122
我觉得这有些问题

况且,我用ADO链接应该不会和ODBC有什么问题吧 
我同学用java链接需要下ODBC驱动。。

#14


1、你先试试用sa用户能不能登录上指定的数据库。
2、你测试一下,不从文件里读连接字符串,你直接在代码里写一个字符串试试,看看能不能正常连接到数据库,连接字符串用我给你的那个!

#15


谢谢啊,我试过了,还是不行。我再等几天实在不行,我就结贴,分我还是给你啊 ,谢谢你一直来都这么支持我。

#16


呵呵,不客气,祝愿你的问题能尽快的解决!

#17


柯同学你好

#18


你好,李同学。欢迎回答我的问题。

#19


lz问题解决了没?问题关键点在哪呢?也遇到同样问题了。

#20


ADO没设置好。你可以测试一下ADO与数据库是否测试正常,然后再写其他的内容。

#21


连接好了,我试过的。这都一年前的东西了
额