首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

ODBC 組語教程(三):使用陳述句執行 SQL 與參數綁定

     編輯:組合語言

前言

建立資料庫連線後,需透過「陳述句」向資料源發送 SQL 命令。本章涵蓋陳述句控制代碼分配、直接執行與預備執行兩種模式、參數綁定技術,以及陳述句釋放流程。

四大步驟

  1. 分配陳述句控制代碼(SQLAllocHandle)
  2. 建構 SQL 字串
  3. 執行陳述句(直接/預備)
  4. 釋放陳述句(SQLFreeHandle)

分配陳述句控制代碼

.data?
hStmt dd ?
.code
invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt
.if ax == SQL_SUCCESS || ax == SQL_SUCCESS_WITH_INFO
    ; 成功
.endif

注意:ODBC 3.x 回傳值在 AX(16-bit),非 EAX。

直接執行

適合一次性查詢,SQL 在執行時編譯。

.data
SQLStmt db "select * from Sales",0
.code
invoke SQLExecDirect, hStmt, addr SQLStmt, sizeof SQLStmt

回傳值:SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE、SQL_NEED_DATA、SQL_NO_DATA、SQL_STILL_EXECUTING(非同步)。

預備執行

同一 SQL 重複執行時效能較佳:先 SQLPrepare 編譯,再多次 SQLExecute。

invoke SQLPrepare, hStmt, addr SQLStmt, sizeof SQLStmt
invoke SQLExecute, hStmt

參數綁定

以 ? 作為參數標記,配合 SQLBindParameter 將程式變數綁定至參數。

.data
SQLString db "select telephoneNo from employee where name=?",0
Sample1 db "Bob",0
Sample2 db "Mary",0
.data?
buffer db 21 dup(?)
StrLen dd ?

.code
invoke SQLPrepare, hStmt, addr SQLString, sizeof SQLString
invoke SQLBindParameter, hStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 20, 0, addr buffer, sizeof buffer, addr StrLen

; 第一次查詢
invoke lstrcpy, addr buffer, addr Sample1
mov StrLen, sizeof Sample1
invoke SQLExecute, hStmt

; 第二次查詢
invoke lstrcpy, addr buffer, addr Sample2
mov StrLen, sizeof Sample2
invoke SQLExecute, hStmt

SQLBindParameter 關鍵參數

參數說明
ParameterNumber參數序號(從 1 起,最左為 1)
InputOutputTypeSQL_PARAM_INPUT/OUTPUT/INPUT_OUTPUT
ValueTypeC 語言資料型別(SQL_C_*)
ParameterTypeSQL 資料型別(SQL_CHAR 等)
ColumnSize欄位長度
DecimalDigits小數位數
ParameterValuePtr資料緩衝區位址
BufferLength緩衝區長度
StrLen_or_IndPtr實際資料長度指標,或 SQL_NTS(以 0 結尾)、SQL_NULL_DATA

重置參數與釋放陳述句

; 解除綁定並重置參數
invoke SQLFreeStmt, hStmt, SQL_UNBIND
invoke SQLFreeStmt, hStmt, SQL_RESET_PARAMS

; 釋放陳述句控制代碼
invoke SQLFreeHandle, SQL_HANDLE_STMT, hStmt

下一章預告

下一章將介紹如何存取與處理查詢傳回的結果集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved