我做了个GetIp函数,返回ip地址, 返回值为CString类型, 值如"192.168.0.1"
问题是当我调用时出错, 代码如下:
CString m_strServerName;
m_strServerName = GetIp("shiquan-admin") //shiquan-admin为局域网中安装了mysql服务的计算机名 这能成功返回, 我用messagebox显示过m_strServerName
Connection con("mysql_data",m_strServerName,"root","mypassword");//问题出在这
头文件已经包含了, 而且我不用mysql时, 无警告无错误,成功编译, 当包含了mysql的三个文件头iostream iomanip mysql++时,
SQO.exe - 0 error(s), 12 warning(s)
这种警告, 只有不理了, 没办法
但当我添加connection时, 将出现25个error(s),如下
--------------------Configuration: SQO - Win32 Debug--------------------
Compiling...
SQOView.cpp
(警告及错误信息太长, 此略)---------------------------------------------------------------
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 上得到一个管道处理器。
范例
如以下可在启动服务后连接
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数据库
}