程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 將Sybase C程序快速移植到Oracle Pro*C程序

將Sybase C程序快速移植到Oracle Pro*C程序

編輯:關於C語言

本文配套源碼下載

一、前言

當前不少單位在進行系統改造升級時,面臨著如何將各個獨立部門開發的應用所采用的數據庫統一,以便適應數據大集中的需求,方便將來進行數據挖掘等更高層次的應用。在數據庫統一的過程中,如何快速、高效的將已有的基於異種數據庫的程序,特別是采用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的幾個主要函數,下面概述處理辦法,具體的實現參照源代碼:

  1. dbinit():該函數僅僅將針對數據庫操作的一些變量進行初始化。
  2. 一些用戶名、密碼的設置,沒有太多可說的。比較簡單。
  3. dbopen():該函數實際進行數據庫的連接,在連接過程中,我設置了全局變量AllOpenProcess用於保存所有的連接指針,並產生了一個連接串用於標識該連接。保存於全局變量中是因為Sybase函數dbexit沒有輸入參數。
  4. dbcmd():該函數進行sql語句的分析,以便進一步進行判斷。
  5. dbexec():該函數進行命令的執行(不太清楚為什麼Sybase將該函數與dbcmd分開)。對無返回結果集的命令(insert、update、delete)直接通過EXEC SQL AT EXECUTE IMMEDIATE的語法執行。對與存在返回結果集的select,采用oracle動態sql4的方法進行處理。因為時間以及老的程序的關系,本函數的實現僅僅針對了傳入完整sql語句的字符串。
  6. dbresults():判斷返回結果。
  7. dbbind():綁定存儲值的地址,並判斷傳入的類型是否正確。因為老程序僅僅使用了NTBSTRINGBIND類型,所以示例中也僅僅處理了此種類型。
  8. dbnumcols():返回數據列數目,在語句類型為select時有效。
  9. dbnextrow():取得下一條數據值,並填寫到dbbind所綁定的地址空間內。此處需要根據源類型select_dp->T[]以及目標類型進行相關的數據轉換。
  10. dbdead():判斷數據庫連接是否正常。采用從DUAL表中取值的方式來測試。
  11. dbexit():退出數據庫連接。

還有其他很多函數,但是因為我沒有使用到,嘿嘿,就不作實現了。

四.移植

移植的方法很簡單,將原來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 後綴。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved