程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 匯編教程:獲得結果

匯編教程:獲得結果

編輯:匯編語言

在本章中,我們來學習如何獲得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的同好們不應忘記呀!(船長,我們找不到水......順便問一句,這是地球嗎%$#@&*^:-)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved