Visual C ++ ODBC应用程序无法连接到MySQL数据库

时间:2010-11-28 23:49:12

标签: c++ mysql visual-c++ odbc

我正在按照教师给出的示例程序编写我的第一个数据库应用程序,但样本和我自己的程序都无法连接到数据库。 (JDBC示例程序可以,所以服务器应该没问题)。

我在类声明中有这些变量:

SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;  

这是我的数据库处理程序类的构造函数,它是应该建立连接的地方:

DBModule::DBModule(string server, string database)
{
this->server = server; //"localhost" is loaded into it
this->database = database; //"test" is loaded into it, of course it exists on the server

SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

command = "DRIVER={MySQL ODBC 3.51 Driver};SERVER="+this->server+";DATABASE="+this->database+";";
//command looks like this now:
//"DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;"

ret = SQLDriverConnect(dbc, NULL, (SQLWCHAR *)command.c_str(), SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

if (!SQL_SUCCEEDED(ret)) {
    err += CONNECT_DATABASE*DATABASE_UNREACHABLE;
    good = false;
    return;
} else {
    good = true;
}

SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

command = sysToStd(DBINIT);

SQLPrepare(stmt, (SQLWCHAR *)command.c_str(), SQL_NTS);
ret = SQLExecute(stmt);
}

SQLDriverConnect的ret获得-1值。

我使用最新的XAMPP作为服务器,具有所有默认设置(所以我是“root”,没有密码)。我已经尝试将UID = root添加到连接字符串,但它也做了同样的事情。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可能没有安装MySQL ODBC驱动程序。 JDBC的工作原理是因为您无需“安装”它们:它们是Java应用程序附带的一些.jar文件。如果您将使用ODBC然后安装MySQL ODBC驱动程序,在ODBC管理器中将连接配置为系统DSN,然后从ODBC管理器检查它是否连接到数据库(我知道大多数ODBC驱动程序都有“测试连接”按钮)。

当此类测试显示您“已连接”或类似时,您可以测试您的应用程序是否连接。你的连接刺痛看起来像:

  DRIVER={MySQL ODBC 3.51 Driver};SERVER=...;DATABASE....

所以根据:http://www.connectionstrings.com/mysql#p30它看起来你正在尝试使用MySQL Connector / ODBC 3.51

也许数据库没有在dafult端口上监听?