SQLHENV m_hEnviroment; //数据库环境句柄,属于老大级别的
SQLHDBC m_hDatabaseConnection; //数据库连接句柄,老大以后就是他了,有了他数据库就连接上了
SQLHSTMT m_hStatement; //执行语句句柄,最终执行SQL于句的句柄
// 使用ODBC API建立数据库连接分为3部分:
// 申请环境句柄,
// 使用环境句柄申请连接句柄,
// 使用连接句柄连接数据库。
/* 申请环境变量 */
// 申请各种句柄都靠这个函数,
// 参数1是要申请句柄的类型,
// 参数2为申请该句柄依靠的句柄(老大没依靠,所以是NULL),申请结果在参数3中保存
SQLRETURN sqlReturn = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &m_hEnviroment);
// 返回值代表着执行的意义,如下面判断,SUCCESS_WITH_INFO相当于是警告,虽然成功了,但是可能有问题
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
{
;
}
// 设置ODBC环境属性
SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
/* 申请连接句柄 */
sqlReturn = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
{
;
}
// 准备连接工作
SQLWCHAR* sqlwcaDsnName = _T("mysqlDB"); //数据源名称
SQLWCHAR* sqlwcaUserName = _T("root"); //用户名称
SQLWCHAR* sqlwcaPassWord = _T("kingview"); //密码
// 连接数据源
sqlReturn = SQLConnect( m_hDatabaseConnection
,sqlwcaDsnName, SQL_NTS
,sqlwcaUserName, SQL_NTS
,sqlwcaPassWord, SQL_NTS);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
{
;
}
/* 申请SQL语句句柄 */
SQLRETURN sqlReturn = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
{
;
}
/* 构造SQL语句 */
CString cstrSql;
cstrSql.Format(_T("SELECT * FROM mytable "));
/* 执行SQL语句 */
sqlReturn = SQLExecDirect(m_hStatement, cstrSql.GetBuffer(), SQL_NTS);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
{
;
}
/* 获得返回结果的行数 */
SQLINTEGER sqlnIdCount = ;
sqlReturn = SQLRowCount(m_hStatement,&sqlnIdCount);
/* 开始读取结果 */
// 读取第一行时要调用,以后依次调用就可以下移行数,直到不返回SQL_SUCCESS
sqlReturn = SQLFetch(m_hStatement);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
{
;
}
SQLINTEGER sqlnID;
SQLINTEGER sqlnIDLength = ;
/* 获得数据 */
SQLGetData(m_hStatement, , &sqlnIDLength);
// 参数1为执行语句的句柄,
// 参数2为所要得到的数据位于的列数(SQL语句中),
// 参数3为数据类型,这个比较多,需要看一下MSDN
// 参数4为保存的位置(地址),
// 参数5为参数4可用的位置,既然参数3已设定为长整型,所以这里可使用0
// 参数6为实际返回的长度
// 释放句柄,断开连接
SQLFreeHandle(SQL_HANDLE_STMT, m_hStatement);
SQLFreeHandle(SQL_HANDLE_DBC, m_hDatabaseConnection);
SQLFreeHandle(SQL_HANDLE_ENV, m_hEnviroment);