ODBC API簡介


1.      數據類型:

通過SQLGetTypeInfo函數來獲取ODBC 3.0支持的數據類型信息。由SQLGetTypeInfo返回的數據類型是數據源所支持的數據類型。

SQLRETURN SQLGetTypeInfo(

     SQLHSTMT      StatementHandle,

     SQLSMALLINT   DataType);

其中DataType類型為SQL Data Types的一種,具體參見

https://msdn.microsoft.com/en-us/library/ms710150(v=vs.85).aspx

同時需要了解SQL數據類型與C數據類型的對應關系:

C type identifier

ODBC C typedef

C type

SQL_C_CHAR

SQLCHAR *

unsigned char *

SQL_C_SSHORT[j]

SQLSMALLINT

short int

SQL_C_USHORT[j]

SQLUSMALLINT

unsigned short int

SQL_C_SLONG[j]

SQLINTEGER

long int

SQL_C_ULONG[j]

SQLUINTEGER

unsigned long int

SQL_C_FLOAT

SQLREAL

float

SQL_C_DOUBLE

SQLDOUBLE, SQLFLOAT

double

SQL_C_BOOKMARK[i]

BOOKMARK

unsigned long int[d]

SQL_C_VARBOOKMARK

SQLCHAR *

unsigned char *

SQL_C_TYPE_DATE[c]

SQL_DATE_STRUCT

struct tagDATE_STRUCT {

   SQLSMALLINT year;

   SQLUSMALLINT month;

   SQLUSMALLINT day; 

} DATE_STRUCT;[a]

SQL_C_TYPE_TIME[c]

SQL_TIME_STRUCT

struct tagTIME_STRUCT {

   SQLUSMALLINT hour;

   SQLUSMALLINT minute;

   SQLUSMALLINT second;

} TIME_STRUCT;[a]

SQL_C_TYPE_TIMESTAMP[c]

SQL_TIMESTAMP_STRUCT

struct tagTIMESTAMP_STRUCT {

   SQLSMALLINT year;

   SQLUSMALLINT month;

   SQLUSMALLINT day;

   SQLUSMALLINT hour;

   SQLUSMALLINT minute;

   SQLUSMALLINT second;

   SQLUINTEGER fraction;[b]

} TIMESTAMP_STRUCT;[a]

 

2.      常用接口:

  • 連接到數據源

下面的函數用於連接到數據源:

(1)SQLAllocHandle:分配環境、連接、語句或者描述符句柄。

(2)SQLConnect:建立與驅動程序或者數據源的連接。訪問數據源的連接句柄包含了包括狀態、事務申明和錯誤信息的所有連接信息。

(3)SQLDriverConnect:與SQLConnect相似,用來連接到驅動程序或者數據源。但它比SQLConnect支持數據源更多的連接信息;

(4)SQLBrowseConnect:支持一種交互方法來檢索或者列出連接數據源所需要的屬性和屬性值。

  • 獲取驅動程序和數據源信息

下面的函數用來獲取驅動程序和數據源信息:

(1)SQLDataSources:能夠被調用多次來獲取應用程序使用的所有數據源的名字。

(2)SQLDrivers:返回所有安裝過的驅動程序清單,包括對它們的描述以及屬性關鍵字。

(3)SQLGetInfo:返回連接的驅動程序和數據源的元信息。

(4)SQLGetFunctions:返回指定的驅動程序是否支持某個特定函數的信息。

(5)SQLGetTypeInfo:返回指定的數據源支持的數據類型的信息。

  • 設置或者獲取驅動程序屬性

下面的函數用來設置或者獲取驅動程序屬性:

(1)SQLSetConnectAttr:設置連接屬性值。

(2)SQLGetConnectAttr:返回連接屬性值。

(3)SQLSetEnvAttr:設置環境屬性值。

(4)SQLGetEnvAttr:返回環境屬性值。

(5)SQLSetStmtAttr:設置語句屬性值。

(6)SQLGetStmtAttr:返回語句屬性值。

  • 設置或者獲取描述符字段

下面的函數用來設置或者獲取描述符字段:

(1)SQLGetDescField:返回單個描述符字段的值。

(2)SQLGetDescRec:返回當前描述符記錄的多個字段的值。

(3)SQLSetDescField:設置單個描述符字段的值。

(4)SQLSetDescRec:設置描述符記錄的多個字段。

  • 准備SQL語句

下面的函數用來准備SQL語句:

(1)SQLPrepare:准備要執行的SQL語句。

(2)SQLBindParameter:在SQL語句中分配參數的緩沖區。

(3)SQLGetCursorName:返回與語句句柄相關的游標名稱。

(4)SQLSetCursorName:設置與語句句柄相關的游標名稱。

(5)SQLSetScrollOptions:設置控制游標行為的選項,在ODBC 3.0 中被SQLGetInfo和SQLSetStmtAttr接口替代

  • 提交SQL請求

下面的函數用來提交SQL請求:

(1)SQLExecute:與SQLPrepare共同使用,執行准備好的SQL語句。

(2)SQLExecDirect:執行一條SQL語句。

(3)SQLNativeSql:返回驅動程序對一條SQL語句的翻譯,並不執行sql語句。

(4)SQLDescribeParam:返回對SQL語句中指定參數的描述。

(5)SQLNumParams:返回SQL語句中參數的個數。

(6)SQLParamData:與SQLPutData聯合使用在運行時給參數賦值。

(7)SQLPutData:在SQL語句運行時給部分或者全部參數賦值。

  • 檢索結果集及其相關信息

下面的函數用來檢索結果集及其相關信息:

(1)SQLRowCount:返回INSERT、UPDATE或者DELETE等語句影響的行數。

(2)SQLNumResultCols:返回結果集中列的數目。

(3)SQLDescribeCol:返回結果集中列的描述符記錄。

(4)SQLColAttribute:返回結果集中列的屬性。

(5)SQLBindCol:為結果集中的列分配緩沖區。

(6)SQLFetch:在結果集中檢索下一行元組。

(7)SQLFetchScroll:返回指定的結果行。

(8)SQLGetData:返回結果集中當前行某一列的值。

(9)SQLSetPos:在取到的數據集中設置游標的位置。這個記錄集中的數據能夠刷新、更新或者刪除。

(10)SQLBulkOperations:執行塊插入和塊書簽操作,其中包括根據書簽更新、刪除或者取數據。

(11)SQLMoreResults:確定是否能夠獲得更多的結果集,如果能就執行下一個結果集的初始化操作。

(12)SQLGetDiagField:返回一個字段值或者一個診斷數據記錄。

(13)SQLGetDiagRec:返回多個字段值或者一個診斷數據記錄。

  • 取得數據源系統表的信息

下面的函數用來取得數據源系統表的信息:

(1)SQLColumnPrivileges:返回一個關於指定表的列的列表以及相關的權限信息。

(2)SQLColumns:返回指定表的列信息的列表。

(3)SQLForeignKeys:返回指定表的外鍵信息的列表。

(4)SQLPrimaryKeys:返回指定表的主鍵信息的列表。

(5)SQLProcedureColumns:返回指定存儲過程的參數信息的列表。

(6)SQLProcedures:返回指定數據源的存儲過程信息的列表。

(7)SQLSpecialColumns:返回唯一確定某一行的列的信息,或者當某一事務修改一行的時候自動更新各列的信息。

(8)SQLStatistics:返回一個單表的相關統計信息和索引信息。

(9)SQLTablePrivileges:返回相關各表的名稱以及相關的權限信息。

(10)SQLTables:返回指定數據源中表信息。

  • 終止語句執行

下面的函數用來終止語句執行:

(1)SQLFreeStmt:終止語句執行,關閉所有相關的游標,放棄沒有提交的結果,選擇釋放與指定語句句柄相關的資源。

(2)SQLCloseCursor:關閉一個打開的游標,放棄沒有提交的結果。

(3)SQLCancel:放棄執行一條SQL語句。

(4)SQLEndTran:提交或者回滾事務。

  • 中斷連接

下面的函數處理中斷連接的任務:

(1)    SQLDisconnect:關閉指定連接。

(2)    SQLFreeHandle:釋放環境、連接、語句或者描述符句柄。

 

 

參考:

  https://msdn.microsoft.com/en-us/library/ms714562(v=vs.85).aspx

  http://www.cnblogs.com/huzhongzhong/archive/2011/07/12/2104209.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM