欢迎光临
我们一直在努力

获得结果-数据库专栏,SQL Server

建站超值云服务器,限时71元/月

获得结果
在本章中,我们来学习如何获得sql语句的执行结果。

我们称由查询返回的一组记录为一个 结果集(result set) (或在vb中被称为recordset).检索结果通常分为以下几个步骤:
确认一个结果集是否可用。 将结果集的列绑定在适当的变量上。 取得行
完成对结果集的操作后,我们必须调用sqlclosecursor来销毁它.
确认一个结果集是否可用
有时在执行sql语句后,我们就已经知道结果集是否可用了。如果执行的语句并不是返回结果集的类型,我们就知道结果集不可用了。但有时我们不太清楚使用的sql语句是什么类型,比如说,让用户自行输入sql语句。这时,我们必须确认是否有结果集被建立,这可以通过sqlnumresultcols函数实现。如果结果集存在,则该函数返回结果集中的列数(字段数)。语法如下:

sqlnumresultcols proto statementhandle:dword, pnumcols:dword
statementhandle 语句句柄 pnumcols 指向一个双字的指针,其中包含了结果集的列数。
如果 pnumcols指向的值为0,那么表明结果集不存在。
绑定列
与绑定一个变量到sql语句的参数相同,我们连接(绑定)一个变量到结果集中的某一列。这里要用到的函数是sqlbindcol,语法如下:

sqlbindcol proto statementhandle:dword,
columnnumber:dword,
targettype:dword,
targetvalueptr:dword,
bufferlength:dword,
pstrlenorindptr:dword
statementhandle 语句句柄 columnnumber 结果集中要绑定的列序数.列序数从1开始.列0是书签(bookmark)列. targettype the 指示 targetvalueptr指向的变量(缓冲区)的类型的常数。 targetvalueptr 指向将要捆绑到列的变量或缓冲区的指针。当调用sqlfetch来获得结果集中的行时,本参数指向的变量或缓冲区将被填入被绑定的列的值。 bufferlength 由targetvalueptr指向的缓冲区的长度。 pstrlenorindptr 参见前章sqlbindparameter
例子:

.data?
buffer db 21 dup(?)
datalength dd ? ;调用sqlfetch后,被填入缓冲区的字符串的长度

.code
…..
invoke sqlbindcol, hstmt, 1, sql_c_char, addr buffer, 21, addr datalength
取得一行
非常简单.先调用sqlfetch 检索结果集的一列到绑定的变量中。当sqlfetch调用完成,游标(cursor)被更新(updated).可以认为游标就是一个记录指针(record pointer). 它指明了sqlfetch调用后将返回哪一行。比如说,如果结果集有4列,当结果集建立时,游标指向第一行.当调用了sqlfetch 后,游标被加1。所以如果调用了sqlfetch 4次,就没有更多的行可被提交了。游标会显示指向文件尾(eof). sqlfetch语法如下:

sqlfetch proto statementhandle:dword

当没有行可提交时,这个函数返回 sql_no_data.

例子:

.data?
buffer db 21 dup(?)
datalength dd ?

.code
…..
invoke sqlbindcol, hstmt, 1, sql_c_char, addr buffer, 21, addr datalength
invoke sqlfetch, hstmt

译者废话:还记得地球的经纬吗?我们通过sqlbindcol来定位经度(列),用游标来定义纬度(行),用sqlfetch来获得坐标,而结果集就是地球。大航海时代2的同好们不应忘记呀!(船长,我们找不到水……顺便问一句,这是地球吗%$#@&*^:-)

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 获得结果-数据库专栏,SQL Server
分享到: 更多 (0)