第一范文网 - 专业文章范例文档资料分享平台

3使用ODBC API访问数据库

来源:用户分享 时间:2025/7/2 5:20:23 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_henv, SQL_HANDLE_ENV, “分配连接句柄失败!”); return FALSE; }

其中m_henv是环境句柄,m_hdbc是要分配的连接句柄,m_retcode是返回码

(2) 设置连接属性

连接属性表示了一个连接的特性,如登录等待时间、使用的光标库等。 所有的连接属性都有默认值,也可以通过调用函数SQLSetConnectAttr()设置,调用函数SQLGetConnectAttr()可获取这些连接属性的当前设置值,这两个函数定义如下:

SQLSetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTRGER StringLength );

SQLRETURN SQLGetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER BufferLength, SQLINTEGER *StringLengthPtr );

3、 连接数据源

完成连接属性的设置之后,就可以建立到数据源的连接了。对于不同的程序和用户接口,可以用不同的函数建立连接:SQLConnect、SQLDriverConnect、SQLBrowseConnect (1) SQLConnect

该函数提供了最为直接的程序控制方式,只要提供数据源名称、用户ID和口令,就可以进行连接了。其定义如下:

SQLRETURN SQLConnect(

SQLHDBC ConnectionHandle, //连接句柄 SQLCHAR *ServerName, //数据源名称 SQLSMALLINT NameLength1, //数据源名称长度

);

SQLCHAR *UserName, //用户ID SQLSMALLINT NameLength2, //用户ID长度 SQLCHAR *Authentication, //用户口令 SQLSMALLINT NameLength3 //用户口令长度

//连接数据源

m_retcode = SQLConnect(m_hdbc, (SQLCHAR *)cpServerName, SQL_NTS,

(SQLCHAR *)cpUserName, SQL_NTS, (SQLCHAR *)cpPassword, SQL_NTS);

if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_hdbc, SQL_HANDLE_DBC, “连接数据库失败!”); return FALSE; }

(2) SQLDriverConnect

该函数用一个连接字符串建立至数据源的连接,他可以提供比SQLConnect函数的3个参数更多的信息,可以让用户输入必要的连接信息,使用系统中还没有定义的数据源。

如果连接建立,该函数会返回完整的连接字符串,应用程序可以使用连接字符串建立额外的连接,其定义如下:

SQLRETURN SQLDriverConnect(

SQLHDBC ConnectionHandle; //连接句柄 SQLHWND WindowHandle; //窗口句柄,程序可以用父窗口的句柄或用NULL指针 SQLCHAR *InConnectionString; //一个指向连接字符串的指针 SQLSMALLINT StringLength1, //连接字符串长度

SQLCHAR *OutConnectionString; //一个指向连接字符串的指针 SQLSMALLINT BufferLength; //存放连接字符串的缓冲区的长度 SQLSMALLINT *StringLength2Ptr; //返回的连接字符串中的字符数 SQLUSMALLINT DriverCompletion //额外的连接信息,可能的取值:

SQL_DRIVER_PROMPT、SQL_DRIVER_COMPLETE、 SQL_DRIVER_COMPLETE_REQUIRED、 SQL_DRIVER_NOPROMPT

);

(3) SQLBrowseConnect

函数SQLBrowseConnect支持以一种迭代的方式获取到数据源的连接,直到最后建立连接。它基于客户机/服务器体系结构,因此本地数据库(如Microsoft Access)不支持该函数。

一般,只提供部分连接信息,如果足以建立到数据源的连接,则成功建立连接,否则返回SQL_NEED_DATA,并在OutConnectionString参数中返回所需要的

信息。其定义如下:

SQLRETURN SQLBrowseConnect( SQLHDBC ConnectionHandle, SQLCHAR *InConnectionString, SQLSMALLINT StringLength1, SQLCHAR *OutConnectionString, SQLSMALLINT BufferLength, SQLSMALLINT *StringLength2Ptr );

//连接句柄

//指向输入字符串的指针 //输入字符串的指针长度 //指向输出字符串的指针

//存放输出字符串的缓冲区的长度 //实际返回的字符串的长度

连接数据库的完整代码:

BOOL CMyODBC::ConnectDB(const char *cpServerName, const char *cpUserName, const char *cpPassword) { //分配环境句柄 m_retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv); if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO) ) { AfxMessageBox(“分配环境句柄失败!”); return FALSE;

}

/*Set the ODBC version environment attribute*/

m_retcode = SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);

if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_henv, SQL_HANDLE_ENV, “设置odbc版本号时失败!”); return FALSE; }

/*分配连接句柄*/

m_retcode = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_hdbc);

if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_henv, SQL_HANDLE_ENV, “分配连接句柄失败!”); return FALSE; }

/*连接数据库*/

m_retcode = SQLConnect(m_hdbc, (SQLCHAR *)cpServerName, SQL_NTS,

(SQLCHAR *)cpUserName, SQL_NTS, (SQLCHAR *)cpPassword, SQL_NTS);

if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_hdbc, SQL_HANDLE_DBC, “连接数据库失败!”); return FALSE;

}

}

return TRUE;

准备并执行SQL语句

1、 构造SQL语句

可以通过3种方式构造SQL语句:

? 在程序开发阶段确定:具有易于实现且可在程序编码时进行测试的优点 ? 在运行时确定:提供了极大灵活性,但给程序带来了困难,却需要更多的处

理时间

? 由用户输入SQL语句:极大的增强了程序的功能,但是程序必须提供有好的

程序界面,且对用户输入的语句执行一定程序的语法检查,能够报告用户错误。

2、 执行SQL语句 (1) 分配语句句柄

语句句柄为ODBC驱动程序管理器提供数据结构,并跟踪SQL语句的执行机器返回的结果,语句句柄是通过调用SQLAllocHandle函数分配的。下面的代码声明了一个存放语句句柄的变量m_hstmt,在函数中提供该变量的地址指针、所使用的连接句柄m_hdbc以及选项SQL_HANDLE_STMT:

m_retcode = SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &m_hstmt);

if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_hdbc, SQL_HANDLE_DBC, “分配语句句柄失败,不能执行”); return FALSE; }

函数SQLGetStmrrAttr()和SQLSetStmrrAttr()用来获取和设置一个语句句柄的选项,使用方式同前面的SQLGetConnectAttr()和SQLSetConnectAttr()函数相同。当一个语句句柄使用完成后,调用函数SQLFreeHandle()释放句柄。 (2) SQLExecDirect()

SQLExecDirect()函数直接执行SQL语句,对于只执行一次的SQL语句来说,该函数是执行最快的方法,其定义如下:

SQLRETURN SQLExecDirect(SQLHSTMT StatementHandle, //语句句柄

SQLCHAR *StatementText, //要执行的SQL语句 SQLINTEGER TextLength //SQL语句的长度 );

搜索更多关于: 3使用ODBC API访问数据库 的文档
3使用ODBC API访问数据库.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4vhrz1784a35m4y30uyk_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top