運用ODBC API訪問數據庫。本站提示廣大學習愛好者:(運用ODBC API訪問數據庫)文章只能為提供參考,不一定能成為您想要的結果。以下是運用ODBC API訪問數據庫正文
為了存取ODBC數據源,使用順序應該包括以下的步驟:
1.銜接ODBC數據源
要求給定ODBC數據源稱號以及其他一些必要的信息。
在使用順序調用ODBC函數之前,必需初始化ODB接口,樹立一個環境句柄。首先聲明一個環境句柄變量,如:
Dim hEnv1 as Long
假如運用的是ODBC 2.X,那麼調用函數SQLAllocEnv,並把環境變量以援用傳遞的方式傳給該函數。驅動順序管理器將初始化ODBC環境,為環境句柄分配存儲空間,並前往一個環境句柄,如:
SQLAllocEnv(hEvn1)
假如運用的是ODBC 3.X,那麼參數SQL_NULL_EVN調用函數SQLAllocHandle,如:
SQLAllocHandle (SQL_HANDLE_ENV,SQL_NULL_HANDLE,hEnv1)
以上步驟在一個使用順序中只能停止一次。但在一個ODBC環境中可以銜接多個數據源。上面就來看如何銜接數據源。
在銜接數據源之前,使用順序先分配一個或多個銜接句柄。首先聲明一個銜接句柄變量,如:
Dimn hDbc1 as Long
假如運用的是ODBC 2.x,那麼調用函數SQLAllocConnect,並把銜接句柄變量以援用傳遞的方式傳給該函數。驅動順序管理器為該銜接分配一塊貯存空間,並前往一個銜接句柄,如:
SQLAllocConnect(hEnv1,hDbc1)
假如運用的是ODBC 3.x,那麼用參數SQL_HANDLE_DBC和環境句柄來調用函數SQLAllocHandle,如:
SQLAllocHandle(SQL_HANDLE_DBC,hEnv1,hDbc1)
如今就可以指定驅動順序和數據源了,並且用函數SQLDriverConnect來銜接指定的數據源。如:
2.處置SQL語句
(1)使用順序把SQL語句字符串放入一個緩沖區。假如這個SQL語句含有參數,還應該設置參數值。
(2)假如SQL語句前往一個後果集,還要為該語句早班一個游標名。
(3)使用順序以“預備”或“立刻執行”的方式提交SQL語句。
(4)假如SQL語句樹立一組後果集,使用順序可以查詢後果的屬性,例如列數、列的數據類型等。為每一列銜接一個緩沖並提取後果。
(5)假如SQL語句發生錯誤,則提取錯誤信息並采取相應的措施。
在處置SQL語句之前,首先必需分配一個語句句柄。先聲明一個語句句柄變量,如:
Dim hStmtl as ling
假如運用是的ODBC 2.X,那麼調用函數SQLAllocStmt,如:
SQLAllocStmt1(hDbc1,hStmt1)
假如運用的是ODBC 3.X,那麼用參數SQL_HANDLE_STMT和參數hDbc1調用函數SQLAllocHandle,如:
SQLAllocHandle(SQL_HANDLE_STMT,hDbc1,hstmt1)
接上去就可以執行SQL語句了,假如采用“預備”方式執行sql語句,使用順序要做如下步驟:
(1)調用SQLPrepare函數預備一個SQL語句,把SQL語句作為函數的一個參數,例如:
SQLPrepare(hStmt1,"Select Name,Age From Employee Where AGE=?",SQL_NTS)。
(2)設置SQL語句中的參數值。假如SQL語句中呈現了問號(?),那麼標明這個SQL語句是帶參數的,如:
SQLBindParameter(hStmt1,1,SQL_Param_INPUT),
SQL_C_Clong.SQL_INTEGER,0,0,age,0 name,vbNull).
這樣每次查詢後,Name字段值就寄存在變量name中。
(3)調用函數SQLExecute來執行SQL語句。如:SQLExecute(hStmt1)
(4)提取查詢後果.這個義務由函數SQLFetch來完成,如SQLFetch(hStmt1).
(5)依據順序需求,可有選擇地停止這五個步驟.
假如是采用"立刻執行"方式執行SQL語句,那麼省去下面的第一步,在執行SQL語句時,用函數SQLExecuteDirect.如:
但是就速度而言,"預備"方式比"立刻執行"方式要快,因而,只在上面狀況下,思索運用"立刻執行"方式:
(1)使用順序的SQL語句只執行一次;
(2)使用順序在執行前不需求查詢有關後果信息.
3.完畢事務
可以提交事務,也可以撤銷事務。有兩種提交事務的形式:一種是自動形式,另一種是手動形式。
在自動形式下,每個SQL語句都被以為成一個完好的事務而自動提交。在手動形式下,事務由一個或幾個SQL語句組成,假如使用順序提交一個SQL語句時沒有活動事務,驅動順序就樹立一個新的事務,在後續的SQL語句提交進程中,驅動順序堅持這個處於活動的事務,直到使用順序調用函數SQLTransact(ODBC2.X)或SQLENDTRAN(ODBC 3.X)停止事務提交或吊銷。
假如驅動順序支持SQL_AUTOCOMMIT銜接選項,則缺省的事務形式是自動提交形式;假如不支持SQL_AUTOCOMMIT銜接選項,則缺省的事務形式是手動形式。使用順序可以調用函數SQLSetConnectOption(ODBC2.X)或SQLSetconnectAttr(ODBC3.X)停止自動/手動提交形式切換。在停止形式交流時,驅動順序將自動提交以後銜接中的一切活動事務。
使用順序應該用函數SQLTransact或SQLEndTrans來處置事務,而不要用SQL語句中的COMMIT或ROLLBACK來處置事務,COMMIT或ROLLBACK語句的後果取決於驅動順序及相銜接的數據源。
留意:不論是用自動形式還是用手動形式處置事務,也不論是提交事務還是撤銷事務,只需是事務處置都將惹起數據源封閉游標並刪除與該數據源有關的一切存儲方案。
4.中綴銜接
在完成對數據庫的存取後,中綴與數據源的銜接。
用函數SQLDisconnect來中綴與數據源的銜接。例如,上面的語句中綴銜接句柄hDbc1所指的數據源銜接。
SQLDisconnect(hDbc1)
在中綴銜接後,必需釋放一切的句柄,包括語句句柄、銜接句柄和環境句柄。
當運用ODBC2.X時:
(1)釋放語句句柄,用函數SQLFreestmt,如SQL_DROP;
(2)釋放銜接句柄,用函數SQLFreeConnect,如SQLFreeConnect(hDbc1);
(3)釋放環境句柄,用函數SQLFreeEnv,如SQLFreeEnv(hEnv1)。
當運用ODBC3.XJF ,釋放銜接句柄和環境都用函數SQLFreeHandle,只不過帶的參數不同。當釋放銜接句柄時,用參數SQL_HANDLE_DBC;當釋放環境句柄時,用參數SQL_HANDLE_ENV。假如釋放語句句柄時用SQL_DROP,那麼,也運用SQLFreeHandle函數,參數改為SQL_HANDLE_STMT,否則和ODBC2.XG一樣運用SQLFreeStmt.