青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

         北京航空航天大學計算機科學與工程系   黎杰   麥中凡

  ORACLE 公司自1979 年推出基于SQL 標準的關系數據庫產品到1997 年版本8 的推出,
ORACLE 數據庫以其支持大數據庫、多用戶的高性能事務處理,對業界各項工業標準的支持,
完整的安全和完整性控制,支持分布式數據庫和分布處理,具有可移植性、可兼容性和可連接
性等突出優點倍受用戶喜愛,根據IDG1992 年全球UNIX 數據庫的市場報告,ORACLE 占市場
銷售量的50%。而在客戶端的開發工具方面,Visual C++ 也因其強大的功能和高度的靈活性
等特點深受廣大程序員的喜愛,因此本文旨在介紹使用Visual C++ 開發基于ORACLE 數據庫應
用程序的兩種方法.
  
  2. 使用PRO*C 開發數據庫應用
  
  2.1 PRO*C 工作原理
  
  PRO 系列是ORACLE 公司提供的在第三代高級程序設計語言中嵌入SQL 語句來訪問數據庫
的一套預編譯程序,包括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal 和
PRO*PL/I 六種。程序員用相應的高級語言編寫嵌入SQL 語句的PRO 源程序(若用C 語言則稱
為PRO*C 源程序)后運行相應的預編譯程序,把嵌入的SQL 語句轉換為標準的ORACLE 調用并
生成目標源程序,即純高級語言格式的源程序,然后就可以將這些源程序加入用戶的程序中調用.

  
  ORACLE 預編譯程序提供如下功能:
  
  ⑴能用六種通用的高級程序設計語言中的任何一種編寫應用程序。
  
  ⑵遵循ANSI 標準,在高級語言中嵌入SQL 語句。
  
  ⑶可采用動態SQL 方法,讓程序在運行時接受或構造一個有效的SQL 語句。
  
  ⑷實現ORACLE 內部數據類型和高級語言數據類型之間的自動轉換。
  
  ⑸可通過在應用程序中嵌入PL/SQL 事物處理塊來改進性能。
  
  ⑹能在程序行和命令行上指定所需要的預編譯可選項,并可在預編譯的過程中改變它們的
  
  ⑺能全面檢查嵌入的SQL 數據操縱語句和PL/SQL 塊的文法和語義。
  
  ⑻可用SQL*Net 并行存取多個地點的ORACLE 數據庫。
  
  ⑼可把數組作為輸入和輸出程序變量使用。
  
  ⑽能對應用程序中的代碼段進行條件預編譯。
  
  ⑾提供了較強的異常處理功能。
  
  由此可見,通過預編譯程序與其它高級語言的結合,既可以利用SQL 強有力的功能和靈活
性為數據庫應用系統的開發提供強有力的手段,又可以充分利用高級語言自身在系統開發方面
的優勢,從而提供一個完備的基于ORACLE 數據庫應用程序的開發解決方案。
  
  2.2 在VC 中使用PRO*C
  
  每個PRO*C 源文件一般由程序頭和程序體兩部分組成。程序頭包含宿主變量(SQL 語句中
所包含的變量)說明、通訊區定義和C 外部表示符的說明等。程序體一般是由若干函數組成,
這些函數內含有SQL 語句(以EXEC SQL 起頭的語句)。
  
  PRO*C 支持的數據類型包括VARCHAR2( 變長字符串)、NUMBER( 二進制數)、INTGER( 有
符號整數)、FLOAT( 浮點數)、STRING( 以NULL 結尾的字符串)、VARNUM( 變長二進制數)、
LONG( 變長字符串)、VARCHAR( 變長字符串)、ROWID( 二進制值)、DATE( 定長日期/ 時間值)
、VARRAW( 變長二進制數據)、RAW( 定長二進制數據) 、LONGRAW( 變長二進制數據)、
UNSIGNED( 無符號整數)、LONGVARCHAR( 變長字符串)、LONGVARRAW( 變長二進制數據)、
CHAR( 定長字符串)、CHARZ(C 中定長以NULL 結尾的字符串)、MLSLABEL( 變長二進制數據)。
     在PRO*C 中不能使用'l' 或'u' 作詞尾或?x' 作詞頭修飾常量;在SQL 語句中使用單引號來定義字符串,用雙引號來定義特殊的或小寫字符的標識符( 如表名等);SQL 語句中不允許使用C 中的尋址、間接、位邏輯、復合賦值、=、-、++、%、<<、>> 操作符并且用NOT、AND、OR、= 代替!、&&、||、==。
  
  下面的程序是一個聯結數據庫的PRO*C 源程序例子。
     #include  < sqlca.h > //聲明SQL通訊區
     #include  < string.h >
     #include  < afxwin.h >
  
  EXEC SQL BEGIN DECLARE SECTION;
  
  VARCHAR username[20]; //聲明宿主變量
  
  VARCHAR password[20];
  
  VARCHAR dbname[20];
  
  EXEC SQL END DECLARE SECTION;
  
  void db_connect()
  
  {
  
  strcpy((char *)username.arr,"SCOTT");
  
  username.len = strlen((char *)username.arr);
  
  strcpy((char *)password.arr,"TIGER");
  
  password.len = strlen((char *)password.arr);

  
  strcpy((char *)dbname.arr,"SUNDB");
  
  dbname.len = strlen((char *)dbname.arr);

  
  EXEC SQL WHENEVER SQLERROR STOP; //隱式異常處理
  
  EXEC SQL CONNECT :username
  
  IDENTIFIED BY :password USING :dbname;
  
  /*if (sqlca.sqlcode != 0) //顯式異常處理
  
  {
  
  AfxMessageBox(" 與Oracle數據庫連接失敗!");
  
  return;
  
  }*/
  
  }
  
  在VC 中使用PRO*C 時,先用PRO*C 編寫所需的操作數據庫的子程序,再運行PRO*C 預編
譯程序把PRO*C 源程序轉成相應的CPP 源程序
,將該程序插入到用戶工程文件中并在需要對插
入函數進行調用的模塊中說明函數,然后就可以在此模塊中調用所需的函數。
  
  3. 使用ODBC 中間件訪問數據庫
  
  3.1 ODBC 工作原理
  
  ODBC 是Open Database Connect 即開放數據庫互連的簡稱,它是由Microsoft 公司于
1991 年提出的一個用于訪問數據庫的統一界面標準,是應用程序和數據庫系統之間的中間件
。它通過使用相應應用平臺上和所需數據庫對應的驅動程序與應用程序的交互來實現對數據庫
的操作,避免了在應用程序中直接調用與數據庫相關的操作,從而提供了數據庫的獨立性。
  
  ODBC 主要由驅動程序和驅動程序管理器組成。驅動程序是一個用以支持ODBC 函數調用
的模塊(在WIN95 下通常是一個DLL),每個驅動程序對應于相應的數據庫,當應用程序從基
于一個數據庫系統移植到另一個時,只需更改應用程序中由ODBC 管理程序設定的與相應數據
庫系統對應的別名即可。驅動程序管理器(包含在ODBC32.DLL 中)可鏈接到所有ODBC 應用程
序中,它負責管理應用程序中ODBC 函數與DLL 中函數的綁定。
  
  ODBC 使用層次的方法來管理數據庫,在數據庫通信結構的每一層,對可能出現依賴數據
庫產品自身特性的地方,ODBC 都引入一個公共接口以解決潛在的不一致性,從而很好地解決
了基于數據庫系統應用程序的相對獨立性,這也是ODBC 一經推出就獲得巨大成功的重要原因
  
  從結構上分,ODBC 分為單束式和多束式兩類。
  
  ⑴單束式驅動程序
  
  單束式驅動程序介于應用程序和數據庫之間,像中介驅動程序一樣數據提供一個統一的數
  
  當用戶進行數據庫操作時,應用程序傳遞一個ODBC 函數調用給ODBC 驅動程序管理器,
由ODBC API 判斷該調用是由它直接處理并將結果返回還是送交驅動程序執行并將結果返回。
  
  由上可見,單束式驅動程序本身是一個數據庫引擎,由它直接可完成對數據庫的操作,盡
  
  ⑵多束式驅動程序
  
  多束式驅動程序負責在數據庫引擎和客戶應用程序之間傳送命令和數據,它本身并不執行
數據處理操作而用于遠程操作的網絡通信協議的一個界面。
  
  前端應用程序提出對數據庫處理的請求,該請求轉給ODBC 驅動程序管理器,驅動程序管
理器依據請求的情況,就地完成或傳給多束驅動程序,多束式驅動程序將請求翻譯為特定廠家
的數據庫通信接口(如Oracle 的SQLNet)所能理解的形式并交于接口去處理,接口把請求經
網絡傳送給服務器上的數據引擎,服務器處理完后把結果發回給數據庫通信接口,數據庫接口
將結果傳給多束式ODBC 驅動程序,再由驅動程序將結果傳給應用程序。
  
  3.2 在VC 中使用ODBC
  
  Visual C++ 中提供了CDatabase、CRecordset、CRecordView、CDBException 和
CFieldExchange 五個類,這些類封裝了ODBC SDK 函數
,從而使用戶可以無需了解SDK 函數
  
  CDatabase 類:封裝了與數據庫建立連接,控制事務的提交和回滾及執行SQL 語句的方法
  
  CRecordset 類:封裝了大部分操縱數據庫的方法,包括瀏覽、修改記錄,控制游標移動
  
  CRecordView 類:提供了與recordset 對象相連接的視,可以建立視中的控件與數據庫數
  
  CDBException 類:提供了對數據庫操作的異常處理,可以獲得操作異常的相關返回代碼
  
  CFieldExchange 類:提供了用戶變量與數據庫字段之間的數據交換,如果不需要使用自
定義類型,你將不用直接調用該類的函數,MFC Wizard 將自動為程序員建立連接。
  
  4. 兩種方法的比較
  
  綜上所述,使用這兩種方法在Visual C++ 中都可以很方便地開發出基于ORACLE 數據庫
的應用程序,同時,這兩種方法又各有其優缺點。ODBC 由于有MFC 強大的類庫支持而使得編
程實現非常方便,同時可移植性也很強,在異構的數據庫之間移植也只需更改很少的一部分程
序,但是,由ODBC 的實現機制我們可以看到,與PRO*C 相比,應用程序需要經過ODBC 驅動
程序管理器和ODBC 驅動程序兩層才能和數據庫通信接口建立聯系,而PRO*C 是直接與通信接
口聯系,因此建立在ODBC 上應用程序的執行效率會相對低一些。PRO*C 具有執行效率高,支
持嵌入式PL/SQL 塊等ORACLE 自身特有的優點,但正因為有了這些優點,使得用PRO*C 開發出
的應用程序無法向異構數據庫平臺移植。
posted on 2007-04-24 22:29 哈哈 閱讀(1726) 評論(1)  編輯 收藏 引用

評論:
# re: 用VC 開發基于ORACLE數據庫應用程序的兩種方法 2007-07-22 16:22 | oa
能否給出使用ODBC 中間件訪問數據庫更詳細的介紹呢?比如連接和操作數據庫的具體代碼。謝謝  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一级二区| 亚洲一级黄色av| 亚洲图片激情小说| 欧美一级理论片| 美女脱光内衣内裤视频久久影院| 欧美成人免费播放| 一区二区久久| 久久精品国产欧美亚洲人人爽| 久久蜜桃资源一区二区老牛| 欧美成ee人免费视频| 欧美视频久久| 在线精品视频在线观看高清| 在线一区二区日韩| 久久免费少妇高潮久久精品99| 亚洲精品国产精品国产自| 亚洲视频狠狠| 免费成人激情视频| 国产精品一级| 99视频有精品| 老牛嫩草一区二区三区日本| 在线综合+亚洲+欧美中文字幕| 久久激情网站| 国产精品国产亚洲精品看不卡15| 亚洲国产高清一区| 久久精品动漫| 夜夜嗨av一区二区三区| 久久一区国产| 国产精品亚洲片夜色在线| 亚洲日本欧美在线| 久久夜色精品| 亚洲欧美激情诱惑| 欧美日韩成人一区二区三区| 依依成人综合视频| 久久福利资源站| 一区二区电影免费在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品自拍视频| 亚洲图中文字幕| 亚洲国产午夜| 久久中文字幕一区| 韩国一区二区在线观看| 亚洲尤物在线视频观看| 亚洲欧洲另类| 欧美成人国产va精品日本一级| 国内精品视频666| 欧美亚洲午夜视频在线观看| 99热在线精品观看| 欧美国产日韩一区二区| 在线观看视频一区二区| 久久久亚洲精品一区二区三区| 亚洲专区免费| 国产精品高潮久久| 亚洲视频在线观看三级| 久久精品一区二区国产| 一本色道久久综合亚洲精品不| 久久视频在线免费观看| 国产性天天综合网| 亚久久调教视频| 亚洲色无码播放| 国产精品国产三级国产a| 一区二区精品| 99国产精品久久| 欧美日韩国产在线一区| 一区二区黄色| 一区二区毛片| 国产精品私人影院| 欧美一二区视频| 校园春色国产精品| 国产亚洲精品aa午夜观看| 久久国产88| 久久国产精品免费一区| 极品日韩av| 你懂的一区二区| 麻豆九一精品爱看视频在线观看免费| 在线不卡免费欧美| 欧美刺激午夜性久久久久久久| 美女主播视频一区| 亚洲日产国产精品| 亚洲精品一区二区三区蜜桃久| 欧美日韩午夜| 亚洲欧美视频在线| 香蕉乱码成人久久天堂爱免费 | 国产精品成人一区二区网站软件| 亚洲午夜精品网| 亚洲视频国产视频| 国产一区二区三区精品欧美日韩一区二区三区| 欧美一区二区三区播放老司机| 欧美一区二区三区在线免费观看| 国内精品久久久久久久果冻传媒| 欧美69wwwcom| 欧美日韩免费看| 亚洲性视频网址| 午夜精彩国产免费不卡不顿大片| 国内精品美女av在线播放| 免费在线成人av| 欧美理论在线播放| 欧美一区=区| 久久亚洲风情| 一本久道综合久久精品| 亚洲影院污污.| 亚洲第一精品久久忘忧草社区| 亚洲国产另类久久久精品极度| 欧美区在线观看| 欧美一区二区三区在线看| 久久婷婷国产麻豆91天堂| 亚洲美女中出| 亚洲一区视频| 在线观看三级视频欧美| 91久久在线| 国产精品久久二区二区| 久久综合久久综合这里只有精品 | 欧美不卡高清| 欧美日韩综合网| 久久电影一区| 欧美精品二区三区四区免费看视频| 亚洲欧美色婷婷| 老鸭窝亚洲一区二区三区| 亚洲天堂网在线观看| 久久久www免费人成黑人精品 | 农村妇女精品| 午夜视频在线观看一区| 久久久久国产精品午夜一区| 亚洲人成绝费网站色www| 亚洲主播在线| 亚洲精品国产精品国自产在线 | 久久精精品视频| 欧美精品v日韩精品v韩国精品v | 国产精品一区二区三区四区| 欧美伊人久久大香线蕉综合69| 免费高清在线一区| 午夜免费电影一区在线观看| 久久婷婷丁香| 欧美一区二区三区免费视频| 欧美成年人视频| 久久久久久久999精品视频| 欧美日韩国产成人精品| 免费在线看一区| 国产精品男女猛烈高潮激情| 91久久久久久久久| 影音先锋国产精品| 亚洲欧美日韩另类| 宅男在线国产精品| 欧美1区3d| 久久夜色精品国产亚洲aⅴ| 国产精品久久夜| 亚洲美女黄网| 最新精品在线| 午夜国产精品影院在线观看| 在线亚洲精品福利网址导航| 欧美+日本+国产+在线a∨观看| 久久久久青草大香线综合精品| 欧美手机在线视频| 亚洲精品免费一二三区| 亚洲国产日韩欧美在线图片| 久久精品99国产精品| 欧美一级网站| 国产精品美女久久久久久2018| 亚洲日韩视频| 亚洲精品国精品久久99热| 性欧美大战久久久久久久久| 亚洲欧美日韩在线不卡| 欧美日韩在线观看视频| 亚洲黄色成人| 91久久久久久| 你懂的视频一区二区| 欧美88av| 亚洲欧洲另类| 久久综合久色欧美综合狠狠| 久久这里只有精品视频首页| 国产在线精品一区二区中文| 午夜精品国产精品大乳美女| 欧美亚洲在线| 国产麻豆成人精品| 亚洲免费影视第一页| 欧美一级片在线播放| 国产欧美精品日韩| 午夜在线精品偷拍| 欧美在线精品免播放器视频| 国产欧美精品日韩精品| 亚洲欧美激情精品一区二区| 性xx色xx综合久久久xx| 国产欧美日韩不卡免费| 亚洲欧美美女| 久久精品二区三区| 国产主播一区二区| 久久精品国产久精国产一老狼| 另类av导航| 亚洲黄色天堂| 欧美大片免费观看在线观看网站推荐| 欧美搞黄网站| 99av国产精品欲麻豆| 欧美日韩一区二区三区四区五区 | 欧美网站在线观看| 在线亚洲观看| 欧美一区二区三区久久精品茉莉花 | 欧美在线免费观看视频| 国产视频一区在线观看| 久久蜜桃精品| 亚洲日本免费| 午夜精品亚洲|