oracle下的odbc程式設計

2021-07-25 05:46:16 字數 2967 閱讀 4895

只說下碰到的幾個問題:

1.unixodbc版本不一致的問題。

[08004][unixodbc][oracle][odbc][ora]ora-12154: tns:could not resolve the connect identifier specified

[isql]error: could not sqlconnect

2.資料來源首先查詢系統dsn,找不到再查詢使用者dsn

3.連線遠端oracle服務需要配置正確的tnsname,.odbc.ini中的 servername = 【網路服務名tnsname】

4.oracle自帶的unixodbc預設查詢位置為/etc

5.用unixodbc官網提供的查詢示例進行查詢測試。gcc query.c –o query –i/$(指定)/incude –l$(指定)/lib –lodbc

6.依賴關係:libodbc.so動態開啟驅動 libsqora.so.11.1,驅動libsqora.so.11.1依賴libodbcinst.so

isql依賴libodbc.so,間接依賴驅動libsqora.so.11.1(動態開啟的)。

c客戶端依賴libodbc.so,間接依賴驅動libsqora.so.11.1(動態開啟的)。

7.query.c原始碼:

#include #include #include #include #include sqlhenv			 v_od_env;			// handle odbc environment

long v_od_erg; // result of functions

sqlhdbc v_od_hdbc; // handle connection

char v_od_stat[10]; // status sql

sqlinteger v_od_err;

sqllen v_od_len;

sqlinteger v_od_id;

sqllen v_od_rowanz;

sqlsmallint v_od_mlen,v_od_colanz;

char v_od_msg[200],v_od_buffer[200];

sqlhstmt v_od_hstmt;

int main(int argc,char *argv)

v_od_erg=sqlsetenvattr(v_od_env, sql_attr_odbc_version, (void*)sql_ov_odbc3, 0);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

v_od_erg = sqlallochandle(sql_handle_dbc, v_od_env, &v_od_hdbc);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

sqlsetconnectattr(v_od_hdbc, sql_login_timeout, (sqlpointer *)5, 0);

v_od_erg = sqlconnect(v_od_hdbc, (sqlchar*) "zyx", sql_nts,

(sqlchar*) "cbadevdb", sql_nts,

(sqlchar*) "cbadevdb", sql_nts);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

printf("connected !\n");

v_od_erg=sqlallochandle(sql_handle_stmt, v_od_hdbc, &v_od_hstmt);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

sqlbindcol(v_od_hstmt,1,sql_c_char, &v_od_buffer,150,&v_od_len);

sqlbindcol(v_od_hstmt,2,sql_c_ulong,&v_od_id,150,&v_od_len);

v_od_erg=sqlexecdirect(v_od_hstmt,"select name,id from stu order by id",sql_nts);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

v_od_erg=sqlnumresultcols(v_od_hstmt,&v_od_colanz);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

printf("number of columns %d\n",v_od_colanz);

v_od_erg=sqlrowcount(v_od_hstmt,&v_od_rowanz);

if ((v_od_erg != sql_success) && (v_od_erg != sql_success_with_info))

printf("number of rows %d,%d\n",v_od_rowanz,v_od_erg);

v_od_erg=sqlfetch(v_od_hstmt);

while(v_od_erg != sql_no_data)

;sqlfreehandle(sql_handle_stmt,v_od_hstmt);

sqldisconnect(v_od_hdbc);

sqlfreehandle(sql_handle_dbc,v_od_hdbc);

sqlfreehandle(sql_handle_env, v_od_env);

return(0);

}

Visual C 中的ODBC程式設計

一 mfc提供的odbc資料庫類 visual c 的mfc基類庫定義了幾個資料庫類。在利用odbc程式設計時,經常要使用到 cdatabase 資料庫類 crecordset 記錄集類 和crecordview 可視記錄集類 cdatabase類物件提供了對資料來源的連線,通過它可以對資料來源進行...

Visual C 中的ODBC程式設計

microsoft developer studio為大多數標準的資料庫格式提供了32位odbc驅動器。這些標準資料格式包括有 sql server access paradox dbase foxpro excel oracle以及microsoft text。如果使用者希望使用其他資料格式,則需...

Oracle的32位ODBC驅動

最近需要powerdesigner逆向工程,資料庫是64位的oracle。但是pd只能使用32位的odbc驅動程式。折騰半天,特此留念。參考文章 將instantclient basic和instantclient odbc解壓到同一資料夾下。如f instantclient 12 2 因為我已經安...