C++ 如何通过c++;

C++ 如何通过c++;,c++,odbc,driver,dsn,C++,Odbc,Driver,Dsn,我创建了一个PostgreSQL30数据源名称。我测试了它,并设法通过ODBC数据源窗口管理器连接到该dsn。有一个按钮测试,它显示消息对话框,告诉我连接成功 现在我想知道我如何通过C++代码连接到DSN并获得一些数据。p> 这是我的代码,我在网上看到了一些示例,并提出了这段代码 enter code here HENV hEnv = NULL; // for allocating memory usingSQLAllocEnv HDBC hDBC = NULL; // connection

我创建了一个PostgreSQL30数据源名称。我测试了它,并设法通过ODBC数据源窗口管理器连接到该dsn。有一个按钮测试,它显示消息对话框,告诉我连接成功

现在我想知道我如何通过C++代码连接到DSN并获得一些数据。p> 这是我的代码,我在网上看到了一些示例,并提出了这段代码

enter code here

HENV hEnv = NULL; // for allocating memory usingSQLAllocEnv
HDBC hDBC = NULL; // connection handler
HSTMT hStmt = NULL; // statement handler
const char* szDSN = "PostgreSQL30"; // DataSourceName (config in windows 
control panel)
const char* szUID = "postgres"; //username of the database
const char* szPasswd = "postgres"; //password of the database

RETCODE retcode;
int rcod = 1;
int i, j, no = 2;



int main()
{ 
  retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);

  std::cout << retcode << std::endl;

  SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

  retcode = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);

  std::cout << retcode << std::endl;

   retcode = SQLConnectA(hDBC,(SQLCHAR*)szDSN, SQL_NTS, (SQLCHAR*)szUID, SQL_NTS, 
  (SQLCHAR*)szPasswd, 
  SQL_NTS);


std::cout << (SQLCHAR*)szUID << std::endl;


if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
    // connected!!
    std::cout << "Hello World!\n SUCCESSS COME ON PLEASE";
}
else {
    std::cout << retcode << std::endl;
}


SQLFreeHandle(SQL_HANDLE_ENV, &hEnv);
SQLFreeHandle(SQL_HANDLE_DBC, &hDBC);
在此处输入代码
HENV-HENV=NULL;//用于使用SQLAllocenv分配内存
HDBC HDBC=NULL;//连接处理程序
HSTMT HSTMT=NULL;//当一个执行语句句柄
const char*szDSN=“PostgreSQL30”//数据源名称(windows中的配置)
(控制面板)
const char*szUID=“postgres”//数据库的用户名
const char*szPasswd=“postgres”//数据库的密码
RETCODE-RETCODE;
int rcod=1;
int i,j,no=2;
int main()
{ 
retcode=SQLAllocHandle(SQL\u HANDLE\u ENV、SQL\u NULL\u HANDLE和hEnv);

std::cout事实上,ODBC驱动程序管理器在执行SQLConnect调用时会调用ODBC驱动程序:在此阶段,它“知道”要使用哪个驱动程序。请参阅SQLConnect函数描述,“注释”部分:

在应用程序调用函数(SQLConnect、SQLDriverConnect或SQLBrowseConnect)之前,驱动程序管理器不会连接到驱动程序连接到驱动程序。在此之前,驱动程序管理器使用自己的句柄并管理连接信息。当应用程序调用连接函数时,驱动程序管理器会检查指定ConnectionHandle的驱动程序当前是否连接到:

  • 如果驱动程序未连接到,则驱动程序管理器将连接到该驱动程序并调用HandleType为SQL\u HANDLE\u ENV的SQLAllocHandle,HandleType为SQL\u HANDLE\u DBC的SQLAllocHandle,SQLSetConnectAttr的SQLAllocHandle(如果应用程序指定了任何连接属性),以及驱动程序中的连接函数。如果驱动程序返回SQLSetConnectAttr错误,则驱动程序管理器将返回连接函数的SQLSTATE IM006(驱动程序的SQLSetConnectOption失败)和SQL_SUCCESS_以及_信息。有关更多信息,请参阅连接到数据源或驱动程序

  • 如果指定的驱动程序已连接到ConnectionHandle上的,则驱动程序管理器仅调用驱动程序中的连接函数。在这种情况下,驱动程序必须确保ConnectionHandle的所有连接属性保持其当前设置

  • 如果连接到另一个驱动程序,驱动程序管理器将调用HandleType为SQL\U HANDLE\U DBC的SQLFreeHandle,然后,如果在该环境中未连接其他驱动程序,它将在连接的驱动程序中调用HandleType为SQL\U HANDLE\U ENV的SQLFreeHandle,然后断开该驱动程序的连接。然后,它将执行与以下操作相同的操作:驱动程序未连接到

然后,驱动程序分配句柄并初始化自身。”

全文如下: