首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 循序漸進 (24):嵌入式 SQL (Embedded SQL) 在 C 語言中的實作範例

     編輯:關於SqlServer

嵌入式 SQL 概念

允許主機語言(如 C)程式連接資料庫、內嵌 SQL 程式碼,直接操作資料。編譯前須經預處理器轉換 SQL 陳述式。語法細節隨 DBMS、網路、作業系統而異。

完整 C 程式範例:古董資料報表與漲價

#include <stdio.h>

/* 宿主變數宣告區 */
EXEC SQL BEGIN DECLARE SECTION;
int BuyerID;
char FirstName[100], LastName[100], Item[100];
EXEC SQL END DECLARE SECTION;

/* SQLCA 錯誤處理區 */
EXEC SQL INCLUDE SQLCA;

main() {
    /* 連接資料庫 */
    EXEC SQL CONNECT UserID/PassWord;
    if (sqlca.sqlcode) {
        printf("Error connecting to database server.\n");
        exit(1);
    }
    printf("Connected to database server.\n");

    /* 宣告游標:依物品排序 */
    EXEC SQL DECLARE ItemCursor CURSOR FOR
        SELECT ITEM, BUYERID FROM ANTIQUES ORDER BY ITEM;

    EXEC SQL OPEN ItemCursor;

    /* 擷取第一筆 */
    EXEC SQL FETCH ItemCursor INTO :Item, :BuyerID;

    /* 迴圈處理每一筆 */
    while (!sqlca.sqlcode) {
        /* 漲價 5 元 */
        EXEC SQL UPDATE ANTIQUES
            SET PRICE = PRICE + 5
            WHERE ITEM = :Item AND BUYERID = :BuyerID;

        /* 查詢擁有者姓名 */
        EXEC SQL SELECT OWNERFIRSTNAME, OWNERLASTNAME
            INTO :FirstName, :LastName
            FROM ANTIQUEOWNERS
            WHERE BUYERID = :BuyerID;

        printf("%25s %25s %25s", FirstName, LastName, Item);

        /* 擷取下一筆 */
        EXEC SQL FETCH ItemCursor INTO :Item, :BuyerID;
    }

    /* 收尾 */
    EXEC SQL CLOSE ItemCursor;
    EXEC SQL COMMIT RELEASE;
    exit(0);
}

關鍵結構說明

區塊用途
BEGIN/END DECLARE SECTION宣告供 SQL 使用的主機變數(加冒號 :var 參考)
INCLUDE SQLCA引入 sqlca.sqlcode 等錯誤狀態變數
CONNECT建立資料庫連線
DECLARE CURSOR定義結果集游標(多列結果必須)
OPEN/FETCH/CLOSE游標生命週期控制
COMMIT RELEASE提交交易並釋放連線

移植注意事項

  • 不同 DBMS 預處理器指令不同(如 Oracle Pro*C、Informix ESQL/C、PostgreSQL ecpg)
  • 錯誤處理建議每個 EXEC SQL 後檢查 sqlca.sqlcode
  • 游標名稱在連線範圍內唯一
  • 宿主變數型別需與資料庫欄位型別相容
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved