本文配套源碼下載
一、前言
當前不少單位在進行系統改造升級時,面臨著如何將各個獨立部門開發的應用所采用的數據庫統一,以便適應數據大集中的需求,方便將來進行數據挖掘等更高層次的應用。在數據庫統一的過程中,如何快速、高效的將已有的基於異種數據庫的程序,特別是采用C/C++開發的運行於linux/unix下的程序轉換到現有數據庫下,成為不少單位面臨的問題。當然了,基於RAD開發的程序,基本上不需要進行修改,就能達到目的。
針對如何快速地將Sybase C程序移植為Oracle Pro*C程序,本文將指出一個方向,並給出一個粗糙的框架。僅以此文拋磚引玉,希望各位指導。(計劃編寫一個轉換系列,看看各位反應如何吧)
二、原理
Sybase的C程序轉換到Oracle的Pro*C程序,相對於其他類型的轉換有很多優勢(原諒我挑了可能是最簡單的一種轉換):
Sybase程序采用的是C函數調用的方式,這給將Sybase程序轉換到其他任意一種數據庫程序帶來了很大的方便!僅僅需要使用目的數據庫的語法,實現老程序使用到的Sybase函數就可以了!並且不需要對原來的C程序進行任何邏輯方面的修改!
Oracle的Pro*C提供了動態sql的開發方式,這給移植帶來了極大的方便。
Oracle Pro*C與Sybase同樣提供進程多連接方式。
Oracle 9采用parse=full的編譯選項時,C的定義變量可以直接在EXEC SQL中使用,這給程序的編寫方便了不少。
還有其他優勢,不再一一列舉。
三、實現
廢話少說,下面轉入正題:
針對Sybase的幾個主要函數,下面概述處理辦法,具體的實現參照源代碼:
還有其他很多函數,但是因為我沒有使用到,嘿嘿,就不作實現了。
四.移植
移植的方法很簡單,將原來c/c++文件中#include "Sybfront.h" #include "sybdb.h"等引用Sybase頭文件的地方去掉,更換為附件中的#include "database_op.h",同時將附件中database_op.cxx加入到工程中,加上適當的編譯語句(PROC),然後去除原來連接sybase的lib,加入oracle的lib:orasql9.lib。就可以在基本不修改源程序的情況下完成程序的移植!當然,如果你的sybase程序采用了非NTBSTRINGBIND類型的話,自己在cxx文件中加入相關的處理方式吧!祝好運!歡迎探討。
五、技巧
下面我總結一些開發過程中使用到的一些小的技巧,各位見笑。如何充分利用 Visual C++ 的開發環境進行 Pro*C 程序開發:
相信各位對 Visual C++ 的集成開發環境使用比較熟吧,別告訴我你開發 Unix 下的 C/C++ 程序還在使用 vi、UltraEdit、EditPlus 吧!當然了,如果你堅持我也不反對,不過您老此時就不用浪費時間向下翻頁了。
oracle 的 Pro*C 程序一般以 PC 結尾。而以 PC 結尾的程序,沒法按照 C/C++ 的語法在 Visual C++ 的集成開發環境下顯示!只是白紙黑字一片。不像 UltraEdit,可以定制使得 PC 文件按照 C/C++ 的語法顯示(在 UltraEdit 安裝目錄下的 WORDFILE.TXT 文件中包含 "C CPP CC CXX H HPP AWK" 內容的後面加上 "PC" 就可以了)(也許VC有這個功能,不過我沒找到)。怎麼辦呢?簡單,修改PC文件後綴為CXX,此時,文件就按照C/C++語法進行顯示了!此時,設置該文件屬性頁(在VC開發環境的WORKSPACE中選中該文件,按 ALT+F7 )中 General 下的 Always use custom build step 為選中狀態,Curstom Build 頁下的 Commands/Outputs 下參考 oracle 的 example 輸入相應的編譯選項。記得將對應的PC後綴修改為 cxx 後綴。