vs下写的程序一直无法连接上数据库(数据源都已配置好),又试了一下发现telnet localhost 3306也无法连接,windows的防火墙是关闭的,用netstat查看3306端口确实在listening。弱菜求助啊,一天了都没搞定。 

解决方案 »

  1.   

    重新增加一个My Sql 用户试试看
      

  2.   

    提示什么,错误日志中有无信息,
    MYSQL、MYSQL ODBC什么版本,多少位的
    在ODBC中能否连接MYSQL,详细说明。
      

  3.   

    重启下mysql服务
      

  4.   

    这个是用telnet localhost 3306连接时报的错
    没有找到其他的错误日志信息mysql是64位的,版本是5.6.10
    ODBC是32位的ODBC连不上啊,就是SQLConnect()这个函数出的问题。
      

  5.   


    root用户不行吗?
      

  6.   

    mysql是64位的,ODBC用64位的试试
    OR
    mysql用32位的
      

  7.   

    odbc是5.2.w?
      

  8.   


    我用的是MySQL Connector ODBC 5.2.4,不知道怎么看是多少位的(网上查了一下好像就是64位的),
    重装的话用哪个版本比较好
      

  9.   

    http://dev.mysql.com/downloads/connector/odbc/5.2.html
    有32、64位选择,我安装的就是32位
      

  10.   

    又试了一下发现telnet localhost 3306也无法连接
    确认你的MYSQL服务器在运行或者MYSQL数据库服务在运行吗? 如果连 telnet 3306都不行,则与客户端的ODBC没有关系。 先确保MYSQL本身可以连接,然后再检查其它。参考下贴中的检查方法并贴出你的检查结果(#43楼)http://topic.csdn.net/u/20090920/22/14d4f597-b7d4-4c24-b0db-abb2956e66c3.html
    [收集]mysql   无法联接故障现象及原因
      

  11.   

    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;
    }
      

  12.   

    "telnet localhost 3306不通"
    有那提示 是 通的, 若不通则什么提示也没有,一直在等待或马上拒绝
      

  13.   


    哦?那telnet访问不了数据库里的table吗?
      

  14.   

    有无防火墙?在本地能否连接MYSQL
      

  15.   

    mysql里user表加一个 localhost, root
    从你提供的图上看,TELNET 3306是已经通了。不是不通。
      

  16.   


    哦?那telnet访问不了数据库里的table吗?
    如果有谁用telnet来访问数据库里的table, 那真是太厉害了
    因为他要懂得mysql底层协议,而且要知道如何在telnet输二进制(目前是不可以).
      

  17.   

    已关闭windows防火墙;在本地连接MYSQL是指怎么连接,可以直接登陆的。
      

  18.   

    可以直接登陆的。
    mysql -uroot -p
    可以登录?
      

  19.   


    为啥ODBC还是连不上呢
      

  20.   


    嗯,在mysql的bin目录下可以用mysql -uroot -p登陆
      

  21.   


    为啥ODBC还是连不上呢
    14楼不是说ODBC可以连接的?
      

  22.   


    为啥ODBC还是连不上呢
    14楼不是说ODBC可以连接的?那是的程序写错了吗?
    就是SQLCONNECT函数连不上啊==纠结死
      

  23.   

    你的ODBC是在本机上?
      

  24.   

    MYSQL命令行可以连接,说明账号和MYSQL数据库没有问题。现在检查ODBC, 直接在控制面板中的ODBC中创建一个,然后测试一下连接,贴出返回的信息。
      

  25.   

    14楼的代码提示连接失败?用DSN连接还是连接字串?
      

  26.   

    连接失败的原因很多, 你要用SQLGetDiagRec返回错误代码, 看是什么问题
      

  27.   


    用的系统DSN
    连接字串是啥?
      

  28.   

    Driver={MySQL ODBC 5.2W Driver};Server=localhost;Port=3306;Database=aa;USER=root;Pwd=123;]
      

  29.   


    这句话放到哪呢?用不用加什么头文件?直接放到main函数里就报错
    另外这几个变量要申明成什么类型的?
      

  30.   

    SQLDriverConnect 代替SQLConnect
    具体参数看MSDN
      

  31.   


    还是失败啊====
    #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; }