C++ 使用C+连接到Postgres数据库+;

C++ 使用C+连接到Postgres数据库+;,c++,postgresql,C++,Postgresql,我正在尝试从Windows桌面连接到Red Hat Linux服务器上的Postgres数据库。我的Windows计算机上安装了“Postgres DB ODBC驱动程序9.0.0”。我正在使用以下代码。连接不成功。我想知道我的头是否正常,我的_szDSN字符串是否正常 我使用了一个非常类似的代码成功地连接到我在桌面上创建的本地Access数据库。我的桌面上还安装了“Microsoft Access数据库引擎2010” 如果回答这个问题需要更多信息,请告诉我。谢谢你的帮助 #include &l

我正在尝试从Windows桌面连接到Red Hat Linux服务器上的Postgres数据库。我的Windows计算机上安装了“Postgres DB ODBC驱动程序9.0.0”。我正在使用以下代码。连接不成功。我想知道我的头是否正常,我的_szDSN字符串是否正常

我使用了一个非常类似的代码成功地连接到我在桌面上创建的本地Access数据库。我的桌面上还安装了“Microsoft Access数据库引擎2010”

如果回答这个问题需要更多信息,请告诉我。谢谢你的帮助

#include <iostream>
#include <string>
#include <Windows.h>
#include <sql.h>
#include <sqlext.h>

int main()
{
    SQLHENV env;
    SQLHDBC dbc;
    SQLHSTMT stmt;
    SQLRETURN rc;

    //*** Connecting to remote PostgreSQL database
    rc = SQLAllocEnv( &env );
    rc = SQLAllocConnect( env, &dbc );
    if( SQL_SUCCEEDED(rc) )
    {
        std::cout << "allocation successful" << std::endl;
    }
    std::string _szDSN = "DATABASE=dbname; SERVER=123.45.66.7; PORT=5432; UID=id123; PWD=pw123;";
    rc = SQLDriverConnect( dbc, NULL, (unsigned char*)(_szDSN.c_str()), SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT );
    if( SQL_SUCCEEDED(rc) )
    {
        std::cout << "Connection successful" << std::endl;
    }
    else
    {
        std::cout << "Connection UNsuccessful" << std::endl;
    }


    //*** Exit program
    std::cout.flush();
    std::getchar();
    return 1;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
SQLHENV-env;
SQLHDBC-dbc;
SQLHSTMT-stmt;
sqlreturnrc;
//***连接到远程PostgreSQL数据库
rc=SQLAllocEnv(&env);
rc=SQLAllocConnect(env和dbc);
如果(SQL_成功(rc))
{

std::cout首先要检查的是Linux机器上的Postgres服务器是否正在监听端口5432。检查。服务器管理员确认pg_hba.conf已正确设置,并在端口5432上监听。我做了一个netstat,得到了以下信息。$netstat-na | grep 5432 tcp 0 0.0.0.0:5432 0.0.0:*监听tcp 0:::5432:::*侦听unix 2[ACC]流式侦听258994343/tmp/.s.PGSQL.5432为什么要使用这样一个旧版本的ODBC驱动程序?另外,请将命令的输出显示为对问题的编辑,而不是注释,因为这样更清晰。那么…PSQLDBC通过ODBC报告的错误是什么?使用ODBC API获取错误消息,并让您的pro把它打印出来。它可能会提供很多信息。