ODBC API开发教程 - 图文(6)

2019-09-01 12:04

BufferLength:指明ColumnName参数的最大长度。 NameLengthPtr:返回列名称的长度。

DataTypePtr:得到列的ODBC数据类型,请参照图2.5。 ColumnSizePtr:得到列的长度。

DecimalDigitsPtr:当该列为数字类型时返回小数点后数据的位数。 NullablePtr:指明该列是否允许为空值。

2.4.1.9 SQLRowCount 执行SQL语句后得到影响的行数

SQLRETURN SQLRowCount(

SQLHSTMT StatementHandle, SQLINTEGER * RowCountPtr);

你可以通过SQLExecDirect执行SQL语句来插入,修改和删除数据,在执行插入,修改和删除的SQL语句后就可以通过SQLRowCount函数来得到被影响的数据的行数。 Insert into test_t1 values(4, '2002-1-4 11:25' , 'user_4',1.86 );

2.5 ODBC的其他功能介绍

2.5.1 ODBC连接句柄的参数设置

在上一小节中提到了 SQLSetConnectAttr 这个函数,这里需要对这个函数进行一些简单的讲解,你可以通过调用 SQLSetConnectAttr 在数据库连接建立或建立后设置连接的一些属性。

SQLSetConnectAttr的函数原型如下: SQLRETURN SQLSetConnectAttr( SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,

SQLINTEGER StringLength); ConnectionHandle:提供DBC连接句柄。

Attribute:指定需要设置的属性类型,在这里设置为值SQL_ATTR_AUTOCOMMIT。 ValuePtr:提供参数值。

StringLength:指定参数的长度,当参数为整数是设置为SQL_IS_INTEGER,当参数为字符串时设置为字符串长度或者为SQL_NTS 。

这里讲一下常用的参数Attribute可能的取值和ValuePtr对应的取值: Attribute SQL_ATTR_CONNECTION_DEAD ValuePtr 作用 提供一个合法的检查连接是否已经断开 SQLINTEGER 指针作为返回:SQL_CD_TRUE表明连接已经断开, 输出参数 SQL_CD_FALSE表明连接还保持。 SQL_ATTR_CONNECTION_TIMEOUT 设置一个合法的整数 建立与数据库连接时最大等待的超时秒数,ValuePtr设置为0表明不使用超时控制。 SQL_ATTR_LOGIN_TIMEOUT 设置一个合法的整数 建立与数据库用户登录时最大等待的超时秒数,ValuePtr设置为0表明不使用超时控制。 整数,取值为:设置是否跟踪ODBC驱动程序中函数的调SQL_OPT_TRACE_OFF,用。 SQL_OPT_TRACE_ON 设置一个合法的文件设置记录函数调用的文件名称。 名字符串,表明记录跟踪记录的文件名。 SQL_ATTR_TRACE SQL_ATTR_TRACEFILE

2.5.2 ODBC语句句柄的参数设置

如同数据库连接句柄一样,语句句柄也可以设置参数。函数为: SQLRETURN SQLSetStmtAttr(

SQLHSTMT StatementHandle, SQLINTEGER Attribute,

SQLPOINTER ValuePtr, SQLINTEGER StringLength); ConnectionHandle:提供STMT连接句柄。

Attribute:指定需要设置的属性类型,在这里设置为值SQL_ATTR_AUTOCOMMIT。 ValuePtr:提供参数值。

StringLength:指定参数的长度,当参数为整数是设置为SQL_IS_INTEGER,当参数为字符串时设置为字符串长度或者为SQL_NTS 。

这里讲一下常用的参数Attribute可能的取值和ValuePtr对应的取值: Attribute SQL_ATTR_ASYNC_ENABLE ValuePtr 整数,取值为:SQL_ASYNC_ENABLE_OFF,SQL_ASYNC_ENABLE_ON 设置一个合法的整数 整数,取值为:SQL_CURSOR_FORWARD_ONLY,SQL_CURSOR_STATIC,SQL_CURSOR_DYNAMIC,SQL_CURSOR_KEYSET_DRIVEN 作用 是否使用异步执行功能 SQL_ATTR_QUERY_TIMEOUT SQL_ATTR_CURSOR_TYPE SQL语句执行时的超时秒数,设置为0表示无超时 设置光标的类型

2.5.3 ODBC中使用可以滚动的光标

2.5.3.1 ODBC光标类型

从上面的函数SQLSetStmtAttr可以看到我们在ODBC中可以使用不同的光标类型,那么这些光标之间有什么区别。

l 向前光标:SQL_CURSOR_FORWARD_ONLY,光标仅仅向前滚动。

l 静态光标:SQL_CURSOR_STATIC,结果集的数据是静态的,这就是说明在

执行查询后,返回的结果集的数据不会再改变,即使是有其他程序更新了数据库中的记录,结果集中的记录也不会发生改变。 l 动态光标:SQL_CURSOR_DYNAMIC,在光标打开以后,当结果集中的行所对

应的数据值发生变化时,其变化能够能够反映到光标所对应的结果集上,这些变

化包括:字段的修改,添加,结果集中行的顺序变化。但是请注意如果行别删除则无法在当前结果集中反映出,因为被删除的行不再出现在当前的结果集中。动态光标所对应的结果集在数据发生变化时会被重建。例如,假设动态光标已获取到了两行,然后,另一应用程序更新了这两行中的一行,并删除了另一行,如果动态游标再试图获取那些行,它将不能检测已删除的行(因为当前结果集中只有一行,但是不要利用这个办法去检测被删除的行,因为出现这种情况还可能是因为行的数据被改变后不能再满足查询条件),而是返回已更新行的新值。 l 键集光标:SQL_CURSOR_KEYSET_DRIVEN,和上面的动态光标所不同的是键

集光标能够检测到行的删除和修改,但是无法检测到检测到行的添加和结果集顺序变化。因为在光标创建时就创建了整个结果集,结果集合中记录和顺序已经被固定,这一点和静态光标一样。所以键集光标可以说是一种介于静态光标和动态光标之间的光标类型。 需要说明的是并不是每个DBMS的ODBC驱动程序都能够支持所有的这几种光标,具体情况可以通过SQLGetInfo 函数进行查询。

2.5.3.2 利用可滚动光标进行查询

前面介绍的SQLFetch函数只能够让光标向前移动,但在很多时候我们需要光标能够前后移动。我们需要利用另一个函数SQLFetchScroll,但是再这之前请利用SQLSetStmtAttr正确设置光标类型。SQLFetchScroll的原型如下: SQLRETURN SQLFetchScroll(

SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset); 与SQLFetch不同的是多了后面两个参数。

FetchOrientation:表明滚动的方式,允许的值如下: FetchOrientation SQL_FETCH_NEXT SQL_FETCH_PRIOR SQL_FETCH_FIRST SQL_FETCH_LAST SQL_FETCH_ABSOLUTE SQL_FETCH_RELATIVE 含义 滚动到下一行,这时候调用相当与SQLFetch,参数FetchOffset将被忽略 滚动到上一行,参数FetchOffset将被忽略 滚动到第一行,参数FetchOffset将被忽略 滚动到最后一行,参数FetchOffset将被忽略 滚动到参数FetchOffset指定的绝对行 由当前位置滚动到参数FetchOffset指定的相对行,FetchOffset大于0表示向前滚动,FetchOffset小于0表示向后滚动 FetchOffset:表明光标滚动的位置。

光标滚动后,获取数据的方法和SQLFetch相同。滚动时如果指定的位置超出结果集区域会返回错误。

2.5.4 存储过程的执行与参数的绑定

在ODBC中调用存储过程需要遵守ODBC的约定,SQL语句的格式为: {[?=]call procedure-name[([parameter][,[parameter]]...)]}

在这里必须讲解问号在SQL语句中的作用,问号在SQL语句中代表参数的含义,这个参数可以是作为输入,也可以作为输出或者是既输入又输出,参数在SQL语句执行后进行指定,后面的章节中会进一步讲解参数的用法。

其中第一问号的作用是取得存储过程的返回值,在执行的过程中必须将此参数绑定到某一个变量,在执行结束后被绑定的变量中就会被赋值。 后面的参数可以是在SQL语句中直接指定,例如: { call insert_this ( 1 , ‘myName’ ) } 也可以利用参数来指定例如: { call insert_this ( 1 , ? ) }

参数的值会在SQL语句执行的过程中进行指定。

执行存储过程直接利用SQLExecDirect API 函数就可以了。但是存储过程中很多时候会返回结果,这些结果必须用参数的形式才能够得到,所以下面要介绍一下如何利用参数绑定的方法来得到存储过程的返回值,此外利用参数绑定还可以动态的向存储过程提供参数。 但是进行参数绑定就需要使用另一个ODBC API: SQLRETURN SQLBindParameter( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType,


ODBC API开发教程 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第三章 平面机构的运动分析 习题与答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: