Welcome

首页 / 软件开发 / C++ / 通过ODBC API实现对数据库的访问

通过ODBC API实现对数据库的访问2011-02-01 vckbase 郑瑜自从初次接触到vckbase,在里面学了很多东西,这跟大家无私的奉献是离不开的。在数据库方面的技术文章中,很多篇幅是用来介绍ADO或者DAO的访问方式,而关于用ODBC API访问数据库的文章却少之又少。虽然用ODBC访问数据库比较麻烦,但却很灵活,效率高,又便于了解ADO、DAO的底层封装方式,对提升整体软件思想是很有好处的。

现在就数据库的操作类型来谈谈ODBC API的使用。

1、配置数据源。例:

SQLRETURN retcode;
Retcode = SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"SQL Server",

"DSN=masterServer=(local)Database=master");

if(!retcode)

{

AfxMessageBox("系统数据源配置失败!");

return FALSE;
}

2、连接数据库。连接数据库看似要写的很多,其实只要写一次以后,仅仅复制一下,改下数据库名、用户名和密码即可。例:

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)

{

retcode = SQLConnect(hdbc, (SQLCHAR*)(LPCTSTR)m_strDSN, SQL_NTS,

(SQLCHAR*)(LPCTSTR)m_strUSER, SQL_NTS,

(SQLCHAR*)(LPCTSTR)m_strPWD, SQL_NTS);

if (!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO))

{

AfxMessageBox("数据库连接失败!") ;

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return FALSE;

}

else

{

m_bLink = TRUE;

return TRUE;

}

}

else

{

AfxMessageBox("连接句柄分配出错") ;

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return FALSE;

}

}

else

{

AfxMessageBox("属性设置出错!") ;

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return FALSE;

}

}

else

{

AfxMessageBox("环境变量分配出错!") ;

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return FALSE;

}