A. 請教使用proc連接資料庫
#define __PROC_C__#include "db.h"#undef __PROC_C__ /* 包含sql通訊區變數 */EXEC SQL INCLUDE sqlca; /* RELEASE_CURSOR=YES 使PROC 在執行完後釋放與嵌入SQL有關資源 */ EXEC ORACLE OPTION (RELEASE_CURSOR = YES); /* 全局說明段 */EXEC SQL BEGIN DECLARE SECTION; VARCHAR db_name[32 + 1]; VARCHAR db_user[32 + 1]; VARCHAR db_pass[32 + 1]; VARCHAR db_name2[32 + 1]; VARCHAR db_user2[32 + 1]; VARCHAR db_pass2[32 + 1]; VARCHAR db_link2[32 + 1];EXEC SQL END DECLARE SECTION; /* 資料庫是否連接成功的標志 */int g_DBConnected = 0;int g_DBConnected2 = 0; /* 連接資料庫 */int DBConnect(const char *DBName, const char *DBUser, const char *DBPass){ /* 局部sqlca說明 */ struct sqlca sqlca; /* 返回值定義 */ int ret; /* 將形式參數賦到全局說明段中相應變數中 */ memset(db_name.arr, 0, sizeof(db_name.arr)); strncpy(db_name.arr, DBName, sizeof(db_name.arr) - 1); db_name.len = strlen(db_name.arr); memset(db_user.arr, 0, sizeof(db_user.arr)); strncpy(db_user.arr, DBUser, sizeof(db_user.arr) - 1); db_user.len = strlen(db_user.arr); memset(db_pass.arr, 0, sizeof(db_pass.arr)); strncpy(db_pass.arr, DBPass, sizeof(db_pass.arr) - 1); db_pass.len = strlen(db_pass.arr); /* 執行連接資料庫的SQL語句 */ EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name; /* 判斷SQL語句執行結果 */ if (sqlca.sqlcode == 0) { g_DBConnected = 1; ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } return ret;} /* 重連資料庫 */int DBReconnect(){ /* 局部sqlca說明 */ struct sqlca sqlca; /* 返回值定義 */ int ret; /* 執行連接資料庫的SQL語句 */ EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name; /* 判斷SQL語句執行結果 */ if (sqlca.sqlcode == 0) { g_DBConnected = 1; ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } return ret;} /* 斷開資料庫連接 */int DBDisconnect(){ /* 局部sqlca說明 */ struct sqlca sqlca; /* 返回值定義 */ int ret; /* 釋放操作 */ EXEC SQL COMMIT WORK RELEASE; /* 判斷SQL語句執行結果 */ if (sqlca.sqlcode == 0) { ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } g_DBConnected = 0; return ret;}
B. PROC程序如何編譯時不需要連接資料庫校驗
編譯的時候要驗證使用的object是否存在資料庫中,不連接無法驗證
C. linux遠程連接資料庫問題 proc
裝客戶端了么?
修改以下兩個文件
tnsname.ora,和sqlnet.ora
sqlnet.ora 文件:
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
tnsname.ora 文件:
MONTBLANC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.167.237.18)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = caConnection)
)
)
sqlplus caUsername/caPassword@caConnection
看看能連上不?
程序不用改的。
我也是初學proc
#include "sqlca.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void sql_error(char *msg)
{
printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(0);
}
int main() {
EXEC SQL INCLUDE sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR oraCN[30];
EXEC SQL END DECLARE SECTION;
strcpy(oraCN.arr,"caUsername/caPassword@caConnection");
oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len]='\0';
EXEC SQL CONNECT :oraCN;
printf("\n [OK Connected!]\n");
return 0;
}
D. 使用navicat連接資料庫時顯示1146-table 'mysql.proc' doesn't exist,這個怎麼解決
一、資料庫的系統表丟失了。
考慮以下幾種處理方式:
a. 從其它相同版本的mysql資料庫導出個proc的數據通過命令行導入進去;
b. 或者拷貝下data/mysql/proc.frm, proc.MYD, proc.MYI 三個文件到你的資料庫data/mysql/ 目錄下,重啟資料庫;
c. 如果之前有資料庫備份,提取出其中的mysql.proc表來導入。
二、如果是從其它環境導入或拷貝的,資料庫的存儲過程會受影響,需重建所有資料庫下的存儲過程。
E. 用pro*c/c++ 和qt creator工具讓C++連接Oracle資料庫的問題。
資料庫連接作為一種資源,我們的應用必須對之進行行之有效的管理。我們在訪問資料庫的時候,一般傳統上採用先建立連接,然後使用該連接訪問資料庫,在使用完畢後,關閉該連接。這是我們經常採用的方法。該方法的好處是使用簡單,不用對連接進行任何管理。但隨之帶來的缺點也就出現了,在應用需要頻繁訪問資料庫的時候,這種方法就會使程序的效率十分低下,甚至有時候是不能滿足應用的需要的。隨著資料庫連接池技術出現了,我們的應用根據訪問資料庫的頻率動態決定創建連接的數量,以及決定在適當的時刻可以關閉一些資料庫連接,用以節省這種資源。筆者最近在參考了網上大量代碼的同時,實現了如何利用Pro C++使用資料庫連接池完成了多線程對oracle資料庫的訪問。本著來源於網路,共享與網路的精神,和大家共同探討,其中筆者的大部分代碼來源是黃劍鋒先生的共享代碼,在此深表感謝。實現的基本功能如下:1:可以設定最小的資料庫連接數。2:可以設定最大的資料庫連接數。3:當資料庫某個連接空閑時間多長時間後,該連接池會自動斷開連接以節省資料庫連接資源。4:提供了每個連接被使用的次數介面,方便統計和分析各個連接的情況。5:提供了每個連接從上次訪問完畢,懂查看的時候為止,已經空閑的時長,以秒為單位。6:可以動態訪問資料庫存儲過程,即存儲過程的名字可以動態變化的。
代碼庫:http://blog.csdn.net/wayneforever/article/details/9028901
望採納,謝謝
F. c程序通過什麼連接oracle
一般c語言連接oracle資料庫通過使用oracle提供的OCI介面和PROC編程介面兩種方式。
OCI方式純粹是一些函數介面。
PROC是oracle提供的一種C與ORACLE
SQL的混合編程。程序(以.pc為後綴)編好之後,使用oracle提供的proc預編譯程序,將pc文件編譯成c文件(這一過程,相當於將SQL轉換為OCI的介面),然後再使用c語言編譯器生成可以執行文件。
OCI方式不容易入門,它擁有大量的介面函數,要很快熟悉它,非常難。但OCI方式的編程效率很高。
porc方式簡單易用。可用於對性能要求不太高的項目。
G. 有關c語言的proc連接oracle資料庫的問題
在main.pc的insert 函數前加上extern
如
extern void insert (char password_[6],char id_[20],int balance_);
H. proc怎麼連接區域網上的oracle資料庫
兄弟,問題解決了嗎?我也碰到這個問題了,是怎麼連接的?
I. 求助:Proc程序頻繁連接Oracle 資料庫會對Oracle產生什麼影響對操作系統產生什麼影響
Proc支持連接池嗎? 如果支持的話,還是使用連接池吧。 頻繁的連接資料庫,如果程序有 Bug,或者是Oracle 本身的bug, 都可能引起內存泄漏。 如果是生產庫的話,運行不了多久內存 可能就會耗光。 這不是危言聳聽,我見過這樣的事情。