odbc api開啟資料庫連線,一般用: sqldriverconnect
關閉資料庫連線用: sqldisconnect
但是要精細控制,需要設定連線資料庫handle的屬性,比如比較普通的有版本號,超時時間等等。
最近程式設計發現,用關閉資料庫還不能釋放。看樣子是釋放成功了,但用oracle的管理工具看,或者看v$session表,發現連線還存在,狀態是inactive。
怎麼辦?
開啟odbc的***,執行單元測試程式xisql測試,看log,發現有列印:
xisqlbe4-cd4 enter sqlsetenvattr
sqlhenv 00000000
sqlinteger 201
sqlpointer [unknown attribute 201]
sqlinteger 0
看看這個unknown引數是什麼?原來是: sql_attr_connection_pooling, 也就是給odbc環境加了緩衝池。
不呼叫這個,可以正常釋放。
但是,用複雜的服務程式,發現還是釋放不了,看log,有:
vwserverd24-8ac exit sqldisconnect with return code -1 (sql_error)
hdbc 00aa1758
diag [25000] [oracle][odbc]invalid transaction state. (0)
看樣子是事務沒有釋放,就呼叫: sqlendtran, 然後再釋放吧,ok了。
為什麼呢?
因為服務程式的資料庫連線都用: sqlsetconnectattr, 將連線屬性設定成不自動提交的。而簡單的單元測試程式預設就是每執行完一條語句就立即提交的。
看來oracle資料庫在釋放之前,不管你是否用了資料庫修改,就是只呼叫select語句,呼叫一下結束事務也是必要的。
JDBC連Oracle資料庫
string drivername oracle.jdbc.driver.oracledriver string url jdbc oracle thin 172.28.139.78 1521 oracts string username scott string password tiger tr...
oracle 資料庫的 左連 和 右連
a 資訊表 裡面有計畫表id b 計畫表 現在要查詢關聯的id的字段 並且 資訊表沒有 計畫id的資料 用到這個左 因為 資訊表在左 就可以查詢出來 select a.from yt tdkb xxlr a left join yt tdkb jhb b on a.fxxjhsjid b.fid 如...
vc 使用odbc api連線資料庫
初次寫部落格,不知道效果怎樣,我希望在這裡,能和大家共同建立起乙個交流平台,技術 include include include include int main catch sqlallochandle sql handle stmt,hdbc,hstmt sqlchar sql select f...