Connection con("mysql","","root","mypassword"); //出错的地方 
我怀疑是m_strServerName的问题, 我那是CString类型
可是当我改为空, 即localhost, 错误还是一样, 跟上面是一样的, 
怎么办?

解决方案 »

  1.   

    MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag) mysql_real_connect()试图与host上运行的一个MySQL数据库引擎建立一个连接。
    除了mysql_get_client_info(), 在你执行任何其他API函数之前必须成功地完成mysql_real_connect()调用。参数指定如下: 第一个参数应该是一个现存MYSQL结构的地址。在调用mysql_real_connect()之前,你必须调用mysql_init()初始化MYSQL结构。参见下面的例子。
     
    host值可以是一个主机名或一个IP地址。如果host是NULL或字符串"localhost",假定是到本地主机的一个连接。如果OS支持套接字(Unix)或命名管道(Win32),这将使用他们而不是TCP/IP与服务器连接。 user参数包含用户的MySQL登录ID。如果user是NULL,假定是当前用户。在Unix下,它是当前登录名。在Windows ODBC下,必须明确地指定当前用户名字。
     
    passwd参数为user包含口令。如果passwd是NULL,只有在user表中对于有一个空白口令字段的用户的条目将被检查一个匹配。这允许数据库主管设置MySQL权限,使用户获得不同的口令,取决于他们是否已经指定一个口令。注意:不要试图在调用mysql_real_connect()前加密口令;口令加密自动被客户API处理。 db是数据库名。如果db不是NULL,连接将缺省数据库设置为这个值。 
    如果port不是0,值对于TCP/IP连接将用作端口号。注意host参数决定连接的类型。 如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型。 client_flag值通常是0,但是在很特殊的情况下可以被设置为下列标志的组合:
    标志名字           标志含义 
     
    CLIENT_FOUND_ROWS  返回找到的(匹配的)行数,不是受到影响的行数。 
    CLIENT_NO_SCHEMA   不允许db_name.tbl_name.col_name语法。这是为了ODBC兼容;如果你使用该语法,导致语法分析器产生一个错误,它是为在一些ODBC程序捕捉错误是有用的。  
    CLIENT_COMPRESS    使用压缩协议。 
    CLIENT_ODBC        客户是一个ODBC客户。这使mysqld变得对ODBC更友好。  
    CLIENT_SSL         使用 SSL 连接 
    CLIENT_IGNORE_SPACE  允许在函数名后空格  
    CLIENT_INTERACTIVE  Allow interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection.   返回值
    如果连接成功,一个 MYSQL*连接句柄。如果连接失败,NULL。对一个成功的连接,返回值与第一个参数值相同,除非你传递NULL给该参数。错误
    CR_CONN_HOST_ERROR 
    不能连接MySQL服务器。 
    CR_CONNECTION_ERROR 
    不能连接本地MySQL服务器。 
    CR_IPSOCK_ERROR 
    不能创建一个IP套接字。 
    CR_OUT_OF_MEMORY 
    内存溢出。 
    CR_SOCKET_CREATE_ERROR 
    不能创建一个Unix套接字。 
    CR_UNKNOWN_HOST 
    不能找到主机名的IP地址。 
    CR_VERSION_ERROR 
    由于试图使用一个不同协议版本的一个客户库与一个服务器连接导致的一个协议失配。如果你使用一个非常老的客户库连接一个没有使用--old-protocol选项启动的新服务器,这就能发生。 
    CR_NAMEDPIPEOPEN_ERROR; 
    不能在 Win32 上创建一个命名管道。 
    CR_NAMEDPIPEWAIT_ERROR; 
    不能在 Win32 上等待一个命名管道。 
    CR_NAMEDPIPESETSTATE_ERROR; 
    不能在 Win32 上得到一个管道处理器。 范例
    MYSQL mysql;mysql_init(&mysql);
    if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s\n",
              mysql_error(&mysql));
    }
      

  2.   

    晕, 我手中这《mysql编程技巧 - 编程和数据库管理篇》,第186页的在mfc中使用mysql章节中就是直接构造Connection con(……)连接的, 为什么我的不行? 我也跟上面讲的一样包含了文件头啊, ……
      

  3.   

    呵呵,
    不好意思了,
    偶不用VC,
    所以帮不了你了,在Delphi中也是这样做的,
    不过我是引出的libmysql.dll申明
      

  4.   

    void CSQOView::OnFileConnect() 
    {
    // TODO: Add your command handler code here
    CString strServeName; //服务器名称
    strServeName = GetIp("shiquan-admin");
    MessageBox(strServeName,"服务器ip地址",MB_OK);
             //以下连接mysql数据库
    MYSQL mysql; mysql_init(&mysql);
    if (!mysql_real_connect(&mysql,strServeName,"root","sqadmin","mysql",0,NULL,0))
    {
        
    MessageBox(mysql_error(&mysql),"错误",MB_OK);

    }
    //以上连接mysql数据库
    }编译时通过, 警告如前, 运行时出现messagebox 显示内容如下:Access Denied for user:'[email protected]'(Using password: YES)呵呵, 好多了, 是不是授权限问题? :)
      

  5.   

    厉害啊, 都是看的mysql网站的在线手册吗? 还是有书? 我想找本来瞧瞧, mysql编程技巧太水了, 都是浅尝则止, 我用了半天就看完了的书,没什么东东
      

  6.   

    void CSQOView::OnFileConnect() 
    {
    // TODO: Add your command handler code here
    CString strServeName; //服务器名称
    strServeName = GetIp("shiquan-admin");
    MessageBox(strServeName,"服务器ip地址",MB_OK);
        //以下连接mysql数据库
    MYSQL mysql; mysql_init(&mysql);
    if (!mysql_real_connect(&mysql,strServeName,"hr","","mysql",0,NULL,0)) //hr为用户名, 后面为密码
    {
        
    MessageBox(mysql_error(&mysql),"错误",MB_OK);

    }
    else MessageBox("您已成功连接mysql服务器","成功",MB_OK);
    //以上连接mysql数据库
    }呵呵, 我刚才没开服务, 哈哈, 渴望的最后一个成功对话框显示出来了, 呵呵, 谢谢哦, kisssssssss 个, 嘿嘿, 喷一脸口水先, :)