现在又这样的一个问题,如果我创建好数据源那么以下的Code就可以连接到数据库,如果动态连接,不创建数据源那么久连接失败,而且错误信息为:Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度。
也就是:
错误号:HY090  
描述:Invalid string or buffer length 
说明:
(DM) The value specified for argument NameLength1, NameLength2, or NameLength3 was less than 0 but not equal to SQL_NTS.
(DM) The value specified for argument NameLength1 exceeded the maximum length for a data source name.
但是代码中没有上面所说的问题,真的是莫名其妙,很多种原因都试了,真的找不到问题的所在,所以在上面发帖看有没有人有遇到这样的问题。(OS:Win7, IDE:VS2008)
if (!Close())
   return FALSE;SQLRETURN sqlRet = ::SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_sqlhEnv);
if (!SQL_SUCCEEDED(sqlRet))
   return FALSE;sqlRet = ::SQLSetEnvAttr(m_sqlhEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (!SQL_SUCCEEDED(sqlRet))
   return FALSE;sqlRet = ::SQLAllocHandle(SQL_HANDLE_DBC, m_sqlhEnv, &m_sqlhConnection);
if (!SQL_SUCCEEDED(sqlRet))
   return FALSE;HWND hwndDesktop = ::GetDesktopWindow(); // desktop's window handlesqlRet = ::SQLSetConnectAttr(m_sqlhConnection, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_NTS);
if (!SQL_SUCCEEDED(sqlRet))
return FALSE;//其中pszDSN = "Driver={Microsoft Access Driver (*.mdb)};DBQ=E:\\db1.mdb;";
sqlRet = ::SQLConnect(m_sqlhConnection, (SQLCHAR*)pszDSN,
    SQL_NTS, (SQLCHAR*)NULL, 0, NULL, 0);
//上面函数调用后失败,返回值及原因如上面所述,但是这里真的没有发现有什么问题?确定"E:\\db1.mdb"是存在的。