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; } 保留数据库里最新的10W条记录,删除删除前面旧的数据。 MySQL 触发器定义的变量报错 统计那天发贴最多的SQL语句 纯SQL,能搞定这个问题吗?记录重新整理 求删除数据的SQL语句 如何给已经创建好的表中插入一个外健!! 求一条sql语句,怎么得到查询出的记录集里的索引? 请教有关MYSQL的插入语句~ 被mysql存储过程搞疯了 【列转行】把时间列里的每一天(2015-10-10 ),转成新的列名 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; }