Mysql ODBC求助 vs下写的程序一直无法连接上数据库(数据源都已配置好),又试了一下发现telnet localhost 3306也无法连接,windows的防火墙是关闭的,用netstat查看3306端口确实在listening。弱菜求助啊,一天了都没搞定。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重新增加一个My Sql 用户试试看 提示什么,错误日志中有无信息,MYSQL、MYSQL ODBC什么版本,多少位的在ODBC中能否连接MYSQL,详细说明。 重启下mysql服务 这个是用telnet localhost 3306连接时报的错没有找到其他的错误日志信息mysql是64位的,版本是5.6.10ODBC是32位的ODBC连不上啊,就是SQLConnect()这个函数出的问题。 root用户不行吗? mysql是64位的,ODBC用64位的试试ORmysql用32位的 odbc是5.2.w? 我用的是MySQL Connector ODBC 5.2.4,不知道怎么看是多少位的(网上查了一下好像就是64位的),重装的话用哪个版本比较好 http://dev.mysql.com/downloads/connector/odbc/5.2.html有32、64位选择,我安装的就是32位 又试了一下发现telnet localhost 3306也无法连接确认你的MYSQL服务器在运行或者MYSQL数据库服务在运行吗? 如果连 telnet 3306都不行,则与客户端的ODBC没有关系。 先确保MYSQL本身可以连接,然后再检查其它。参考下贴中的检查方法并贴出你的检查结果(#43楼)http://topic.csdn.net/u/20090920/22/14d4f597-b7d4-4c24-b0db-abb2956e66c3.html[收集]mysql 无法联接故障现象及原因 1. mysqld服务已启动2. mysql里user表3. mysqld服务程序确实在监听3306端口4. ping localhost 可通5. telnet localhost 3306不通另外我在配置数据源odbc是可以的但是写的程序SQLCONNECT函数连不上数据库程序如下#include <windows.h>#include <sqlext.h>#include <sql.h>#include <iostream>#include <tchar.h>#include <iostream>using namespace std;CHAR *sqlquery = ("select cno from course;");void OutputResult(HSTMT stmt);struct student { CHAR sno; CHAR sname; CHAR sex;};int main(){ RETCODE error; HENV env; //环境 HDBC conn; //数据库连接 HSTMT stmt; //SQL语句句柄 char pwd[100]; error = SQLAllocEnv(&env); if (error != SQL_SUCCESS && error != SQL_SUCCESS_WITH_INFO) { cout << "获取环境失败\n"; return -1; } SQLAllocConnect(env,&conn); error = SQLConnect(conn, (SQLCHAR*)("TT"), SQL_NTS, (SQLCHAR*)("root"), SQL_NTS, (SQLCHAR*)pwd, SQL_NTS); //cout << error << endl; wchar_t grade[100]={0}; long len_out; if (error == SQL_SUCCESS || error == SQL_SUCCESS_WITH_INFO) { SQLAllocStmt(conn,&stmt); error = SQLExecDirect(stmt, (SQLCHAR*)sqlquery[0], SQL_NTS); if (error == SQL_SUCCESS) { SQLBindCol(stmt, 1, SQL_C_CHAR, grade, 100, &len_out); while(SQLFetch(stmt) == SQL_SUCCESS) { wcout << grade << endl; } } } else { SQLFreeEnv(env); cout << "连接失败\n"; return -1; } return 0;} "telnet localhost 3306不通"有那提示 是 通的, 若不通则什么提示也没有,一直在等待或马上拒绝 哦?那telnet访问不了数据库里的table吗? 有无防火墙?在本地能否连接MYSQL mysql里user表加一个 localhost, root从你提供的图上看,TELNET 3306是已经通了。不是不通。 哦?那telnet访问不了数据库里的table吗?如果有谁用telnet来访问数据库里的table, 那真是太厉害了因为他要懂得mysql底层协议,而且要知道如何在telnet输二进制(目前是不可以). 已关闭windows防火墙;在本地连接MYSQL是指怎么连接,可以直接登陆的。 可以直接登陆的。mysql -uroot -p可以登录? 为啥ODBC还是连不上呢 嗯,在mysql的bin目录下可以用mysql -uroot -p登陆 为啥ODBC还是连不上呢14楼不是说ODBC可以连接的? 为啥ODBC还是连不上呢14楼不是说ODBC可以连接的?那是的程序写错了吗?就是SQLCONNECT函数连不上啊==纠结死 你的ODBC是在本机上? MYSQL命令行可以连接,说明账号和MYSQL数据库没有问题。现在检查ODBC, 直接在控制面板中的ODBC中创建一个,然后测试一下连接,贴出返回的信息。 14楼的代码提示连接失败?用DSN连接还是连接字串? 连接失败的原因很多, 你要用SQLGetDiagRec返回错误代码, 看是什么问题 用的系统DSN连接字串是啥? Driver={MySQL ODBC 5.2W Driver};Server=localhost;Port=3306;Database=aa;USER=root;Pwd=123;] 这句话放到哪呢?用不用加什么头文件?直接放到main函数里就报错另外这几个变量要申明成什么类型的? SQLDriverConnect 代替SQLConnect具体参数看MSDN 还是失败啊====#include <iostream> #include "windows.h" #include "sqlext.h" using namespace std; int main(){ SQLHENV henv; SQLHDBC hdbc; SQLRETURN retcode; SQLCHAR ConnStrOut[256]; SQLCHAR ConnStr[256] = "DSN=Test;UID=root;PWD=*******"; SQLSMALLINT ConnStrOutLen; SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); retcode = SQLDriverConnect(hdbc,NULL,ConnStr,SQL_NTS,ConnStrOut, sizeof(ConnStrOut),&ConnStrOutLen,SQL_DRIVER_NOPROMPT); if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ cout << "ok" << endl; cout << ConnStrOutLen << endl; cout << ConnStrOut << endl; } return 0; } mysql 在创建function出错 在线等 急用!求指教 VC编程,读取mysql数据库表时提示unhandled exception in installbase.exe(LIBMYSQL.DLL):0xc00000 left join和普通的from两个表有什么区别呢? mysql 更新一条记录不是立刻存进去吗? MYSQL问题请教 MYSQL ERROR 1064 复制字段问题 关于MYSQL中ID重新排列问题 MySQL中解决递归问题 10年内每天的数据都有,筛选出120个月中每个月的最大值和最小值 Navicat 乱码 读取数据全是???? MySql 监测工具
MYSQL、MYSQL ODBC什么版本,多少位的
在ODBC中能否连接MYSQL,详细说明。
没有找到其他的错误日志信息mysql是64位的,版本是5.6.10
ODBC是32位的ODBC连不上啊,就是SQLConnect()这个函数出的问题。
root用户不行吗?
OR
mysql用32位的
我用的是MySQL Connector ODBC 5.2.4,不知道怎么看是多少位的(网上查了一下好像就是64位的),
重装的话用哪个版本比较好
有32、64位选择,我安装的就是32位
确认你的MYSQL服务器在运行或者MYSQL数据库服务在运行吗? 如果连 telnet 3306都不行,则与客户端的ODBC没有关系。 先确保MYSQL本身可以连接,然后再检查其它。参考下贴中的检查方法并贴出你的检查结果(#43楼)http://topic.csdn.net/u/20090920/22/14d4f597-b7d4-4c24-b0db-abb2956e66c3.html
[收集]mysql 无法联接故障现象及原因
2. mysql里user表3. mysqld服务程序确实在监听3306端口
4. ping localhost 可通
5. telnet localhost 3306不通
另外我在配置数据源odbc是可以的但是写的程序SQLCONNECT函数连不上数据库程序如下
#include <windows.h>
#include <sqlext.h>
#include <sql.h>
#include <iostream>
#include <tchar.h>
#include <iostream>using namespace std;
CHAR *sqlquery = ("select cno from course;");void OutputResult(HSTMT stmt);
struct student {
CHAR sno;
CHAR sname;
CHAR sex;
};int main()
{
RETCODE error;
HENV env; //环境
HDBC conn; //数据库连接
HSTMT stmt; //SQL语句句柄
char pwd[100];
error = SQLAllocEnv(&env);
if (error != SQL_SUCCESS && error != SQL_SUCCESS_WITH_INFO) {
cout << "获取环境失败\n";
return -1;
}
SQLAllocConnect(env,&conn);
error = SQLConnect(conn, (SQLCHAR*)("TT"), SQL_NTS, (SQLCHAR*)("root"), SQL_NTS, (SQLCHAR*)pwd, SQL_NTS);
//cout << error << endl;
wchar_t grade[100]={0};
long len_out;
if (error == SQL_SUCCESS || error == SQL_SUCCESS_WITH_INFO) {
SQLAllocStmt(conn,&stmt);
error = SQLExecDirect(stmt, (SQLCHAR*)sqlquery[0], SQL_NTS);
if (error == SQL_SUCCESS) {
SQLBindCol(stmt, 1, SQL_C_CHAR, grade, 100, &len_out);
while(SQLFetch(stmt) == SQL_SUCCESS) {
wcout << grade << endl;
}
} }
else {
SQLFreeEnv(env);
cout << "连接失败\n";
return -1;
}
return 0;
}
有那提示 是 通的, 若不通则什么提示也没有,一直在等待或马上拒绝
哦?那telnet访问不了数据库里的table吗?
从你提供的图上看,TELNET 3306是已经通了。不是不通。
哦?那telnet访问不了数据库里的table吗?
如果有谁用telnet来访问数据库里的table, 那真是太厉害了
因为他要懂得mysql底层协议,而且要知道如何在telnet输二进制(目前是不可以).
mysql -uroot -p
可以登录?
为啥ODBC还是连不上呢
嗯,在mysql的bin目录下可以用mysql -uroot -p登陆
为啥ODBC还是连不上呢
14楼不是说ODBC可以连接的?
为啥ODBC还是连不上呢
14楼不是说ODBC可以连接的?那是的程序写错了吗?
就是SQLCONNECT函数连不上啊==纠结死
用的系统DSN
连接字串是啥?
这句话放到哪呢?用不用加什么头文件?直接放到main函数里就报错
另外这几个变量要申明成什么类型的?
具体参数看MSDN
还是失败啊====
#include <iostream> #include "windows.h" #include "sqlext.h" using namespace std; int main(){ SQLHENV henv; SQLHDBC hdbc; SQLRETURN retcode; SQLCHAR ConnStrOut[256]; SQLCHAR ConnStr[256] = "DSN=Test;UID=root;PWD=*******"; SQLSMALLINT ConnStrOutLen; SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); retcode = SQLDriverConnect(hdbc,NULL,ConnStr,SQL_NTS,ConnStrOut, sizeof(ConnStrOut),&ConnStrOutLen,SQL_DRIVER_NOPROMPT); if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ cout << "ok" << endl; cout << ConnStrOutLen << endl; cout << ConnStrOut << endl; } return 0; }