摘抄的一段使用ODBC API 連接數(shù)據(jù)庫(kù)的代碼 ps:msdn文檔 http://msdn.microsoft.com/en-us/library/ms714562(VS.85).aspx頭文件
 SQLHENV m_henv; /**////< ODBC環(huán)境句柄
SQLHDBC m_hdbc; ///< ODBC句柄
SQLHSTMT m_hstmt; ///< ODBC游標(biāo)句柄
  char m_szDSN[256]; /**////< 數(shù)據(jù)源名
char m_szUserName[256]; ///< 用戶名
char m_szPassword[256]; ///< 密碼
BOOL m_bAutoCommit; ///< 是否自動(dòng)提交
連接函數(shù)
BOOL CODBCTestDemo001Dlg::AllocHandle(SQLHENV &henv, SQLHDBC &hdbc, SQLHSTMT &hstmt)
  {
SQLRETURN retcode;

retcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
 {
retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void *)SQL_OV_ODBC3,0);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
 {
retcode = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
 {
SQLSetConnectAttr(hdbc,(long)SQL_LOGIN_TIMEOUT,(void *)5,0);
if(m_bAutoCommit)
SQLSetConnectAttr(hdbc,(long)SQL_ATTR_AUTOCOMMIT,(void *)SQL_AUTOCOMMIT_ON,0);
else
SQLSetConnectAttr(hdbc,(long)SQL_ATTR_AUTOCOMMIT,(void *)SQL_AUTOCOMMIT_OFF,0);
retcode = SQLConnect(hdbc,(SQLCHAR *)(LPTSTR)m_szDSN,SQL_NTS,
(SQLCHAR *)(LPTSTR)m_szUserName,SQL_NTS,(SQLCHAR *)(LPTSTR)m_szPassword,SQL_NTS);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
 {
return TRUE;
}
else
 {
//ShowError(SQL_HANDLE_DBC,hdbc);
}

SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
hdbc = NULL;
}
else
TRACE("It's Useless!");
//ShowError(SQL_HANDLE_ENV,henv);
}
else
//ShowError(SQL_HANDLE_ENV,henv);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
henv = NULL;
}
else
return FALSE;
return FALSE;
}
關(guān)閉連接
void CODBCTestDemo001Dlg::DeAllocHandle(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt)
  {
if (m_hdbc)
 {
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
}
if (m_henv)
 {
SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
}
|