您的位置:首页 > 数据库 > MySQL

VC连接mysql遇到的问题

2011-09-29 18:04 471 查看
今天用MFC连接mysql数据库,发现老是连接不上,把代码贴在控制台程序下运行,又可以运行,很奇怪。后来我把异常打印出来:Client does not support authentication protocol requested by server; consider upgrading MySQL client。在网上查了下,说是mysql新旧版本的密码算法不同引起的,用下面两种方法可以解决:

1)MySQL->SET PASSWORD FOR 'some_user'@'some_host'=OLD_PASSWORD('new_password');

MySQL->FLUSH PRIVILEGES;

2)MySQL->UPDATE MySQL.user SET Password=OLD_PASSWORD('new_password') WHERE Host='some_host' AND User='some_user';

MySQL->FLUSH PRIVILEGES;

MySQL 4.1/5.0 是通过 PASSWORD 加密的。我想了下,可能是我下的libmsyql.dll动态链接库是别人的,而别人的版本和我现在的版本不同,所以出现上面的情况。

连接mysql的代码大概如下:

unsigned short Port = 3306;
CString IPAddress = "localhost";
CString UserName = "xxx";
CString Password = "123";
CString DBName = "mydb";
unsigned long  i;
MYSQL mysql;
MYSQL_RES   *res;
MYSQL_ROW   row;
mysql_init(&mysql);
CString error;
if(&mysql == NULL)
{
error.Format("Error:   %s\n   ",   mysql_error(&mysql));
AfxMessageBox(error);
return ;
}
AfxMessageBox("MySQL mysql init OK. \n");
if(!mysql_real_connect(&mysql, IPAddress, UserName, Password, DBName, Port , NULL, 0))
{
error.Format("Error:   %s\n   ",   mysql_error(&mysql));
AfxMessageBox(error);
return ;
}
AfxMessageBox("MySQL connnect OK. \n");
if(mysql_query(&mysql,"SELECT * FROM  user"))
{
error.Format("Error:   %s\n   ",   mysql_error(&mysql));
AfxMessageBox(error);
}

if( !(res = mysql_store_result(&mysql)) )
{
error.Format("Error:   %s\n   ",   mysql_error(&mysql));
AfxMessageBox(error);
}

while( (row = mysql_fetch_row(res)) )
{
for(i=0 ; i<mysql_num_fields(res); i++)
{
CString s = row[i];
AfxMessageBox(s);
}
}
mysql_free_result(res);
if(mysql_query( &mysql,"insert into user SET name=\aabbcc\'"))
{
error.Format("Error:   %s\n   ",   mysql_error(&mysql));
AfxMessageBox(error);
}
mysql_close(&mysql);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: