数据库连接问题,为什么SQLConnect连接失败

jadyzdr 2011-05-04 04:35:28
前面都正常,就下面的SQLConnect函数执行失败,MSDN上例子,怎么回事,我就改了数据库用户的连接参数,PC-201101311025是我的数据库服务器名称。
#include   <windows.h>   
#include "sqlext.h"
#include "stdio.h"
void main()
{

SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;

/*Allocate environment handle */
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
/* Set the ODBC version environment attribute */
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
/* Allocate connection handle */
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
/* Set login timeout to 5 seconds. */
SQLSetConnectAttr(hdbc, /*(void*)*/SQL_LOGIN_TIMEOUT, (void*)5, 0);

/* Connect to data source */
retcode = SQLConnect(hdbc, (SQLCHAR*) "PC-201101311025", SQL_NTS,
(SQLCHAR*) "sa", SQL_NTS,
(SQLCHAR*) "", SQL_NTS);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
/* Allocate statement handle */
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
printf("success"); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
/* Process data */

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
SQLDisconnect(hdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
}
...全文
1114 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dll_870587814 2013-05-15
  • 打赏
  • 举报
回复
总结如上所述,所谓的DSN是指在ODBC中配置的数据库名称,在系统中已经将服务器和数据库连接起来了,所以我们连接的应该是我们在ODBC中添加的数据库名称
snowrab0281 2012-09-28
  • 打赏
  • 举报
回复
我也遇到了同样的问题,可是我按照楼上所说的,用数据库名称或者DSN名称都不能成功啊。求救~~
jadyzdr 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 diyoosjtu 的回复:]
我也遇到了同样的问题,连接不上数据库。
楼上说的“那个服务器名称PC-201101311025的原因,这个地方应该是要连接的数据库的名称,不是服务器名”。不是应该链接 用户DSN吗?我这样弄的,可是一直都连接不上。
求助!!!!
[/Quote]
改为数据库的名字后连接上了,我用的SQL Server数据库。
随风秀舞 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 diyoosjtu 的回复:]

引用 12 楼 jadyzdr 的回复:

引用 11 楼 diyoosjtu 的回复:
我也遇到了同样的问题,连接不上数据库。
楼上说的“那个服务器名称PC-201101311025的原因,这个地方应该是要连接的数据库的名称,不是服务器名”。不是应该链接 用户DSN吗?我这样弄的,可是一直都连接不上。
求助!!!!

改为数据库的名字后连接上了,我用的SQL Server数据库。……
[/Quote]

哦,我又试了一下,用数据库名称果然可以连接成功!!
呵呵~
随风秀舞 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jadyzdr 的回复:]

引用 11 楼 diyoosjtu 的回复:
我也遇到了同样的问题,连接不上数据库。
楼上说的“那个服务器名称PC-201101311025的原因,这个地方应该是要连接的数据库的名称,不是服务器名”。不是应该链接 用户DSN吗?我这样弄的,可是一直都连接不上。
求助!!!!

改为数据库的名字后连接上了,我用的SQL Server数据库。
[/Quote]

这个应该用在ODBC数据源里面注册的数据源名称。我在“用户DSN”里面注册了一个数据源名称MyODBC,但我的数据库名称是my.db。我用MyODBC连接成功了。
随风秀舞 2011-05-22
  • 打赏
  • 举报
回复
我也遇到了同样的问题,连接不上数据库。
楼上说的“那个服务器名称PC-201101311025的原因,这个地方应该是要连接的数据库的名称,不是服务器名”。不是应该链接 用户DSN吗?我这样弄的,可是一直都连接不上。
求助!!!!
jadyzdr 2011-05-05
  • 打赏
  • 举报
回复
还是我自己发现了问题
retcode = SQLConnect(hdbc, (SQLCHAR*) "PC-201101311025", SQL_NTS,
(SQLCHAR*) "sa", SQL_NTS,
(SQLCHAR*) "", SQL_NTS);
那个服务器名称PC-201101311025的原因,这个地方应该是要连接的数据库的名称,不是服务器名
zxhx 2011-05-05
  • 打赏
  • 举报
回复
测试一下你的连接字符串,可以找一段好使的ODBC代码,把你的连接字符串放上去看看好不好使
见习学术士 2011-05-04
  • 打赏
  • 举报
回复
建个临时工程,用ADO连接看看
jadyzdr 2011-05-04
  • 打赏
  • 举报
回复
怎么没人啊,急救
jadyzdr 2011-05-04
  • 打赏
  • 举报
回复
返回值是SQL_ERROR,不知道什么原因
见习学术士 2011-05-04
  • 打赏
  • 举报
回复
那你看下 retcode 这个返回什么值。
再对比下MSDN的说明
jadyzdr 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyq5945 的回复:]
建议用ADO,很简单的.
[/Quote]整个程序都是ODBC,没法改了,代码太多了
zyq5945 2011-05-04
  • 打赏
  • 举报
回复
建议用ADO,很简单的.
jadyzdr 2011-05-04
  • 打赏
  • 举报
回复
没有抱任何错误,只是连接不上而已
见习学术士 2011-05-04
  • 打赏
  • 举报
回复
try
{
...
}
catch(_com_error e)
{
...
}

一下看看错误描述

4,012

社区成员

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

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