首页 > 解决方案 > 将 ADO 转换为 ODBC,以便解决方案独立于平台

问题描述

最初的 BJTIMES 项目使用内置的 Windows ADO 框架来连接数据库。这将解决方案限制为仅在 Windows 上运行。我正在修改解决方案以使用 ODBC,以便使用 Windows/Linux ODBC 驱动程序,我们可以在 Windows 和 Linux 上运行该解决方案

我试图将 ADO 转换为 ODBC,但是当我运行解决方案时,它说连接失败。这意味着它没有连接到数据库。但它在 ADO 版本中运行良好

try
{     //following ODBC functions to establish connection
    if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &SqlEnvHandle ))        

        if (SQL_SUCCESS == SQLSetEnvAttr(getEnvironment(), SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))

            if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, getEnvironment(), &SqlConnectionHandle ))
            {

                SQLCHAR retconstring[RETURN_CODE_SZ];

                SQLRETURN retcode = SQLDriverConnect(  //establishing the connection to DB
                    getConnection(),
                    NULL,
                    connect,
                    SQL_NTS,
                    retconstring,
                    1024,
                    NULL,
                    SQL_DRIVER_NOPROMPT);

                if ((retcode == SQL_SUCCESS) || (retcode == SQL_SUCCESS_WITH_INFO))
                {
                    isConnected = true;
                    sprintf(m_ErrStr, "Success");
                    IsConnected = true;
                    return IsConnected;
                }
                else
                {
                    sprintf(m_ErrStr, "Failed to connect");
                    return false;
                }
            }

}

CATCHERROR(SqlConnectionHandle,0);

return false;
}

这是连接数据库的代码部分。

在上面的代码中有使用 ADO 而不是 ODBC 的变量。看起来 SQLdriverconnect 有一些问题。我怎样才能找出问题所在?

标签: c++

解决方案


推荐阅读