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

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

  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 哈哈 閱讀(1722) 評論(1)  編輯 收藏 引用

評論:
# re: 用VC 開發基于ORACLE數據庫應用程序的兩種方法 2007-07-22 16:22 | oa
能否給出使用ODBC 中間件訪問數據庫更詳細的介紹呢?比如連接和操作數據庫的具體代碼。謝謝  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区视频在线| 国产精品xxx在线观看www| 欧美国产在线电影| 欧美成人在线免费观看| 另类av导航| 亚洲国产一区二区三区高清 | 久久久久久91香蕉国产| 狂野欧美一区| 欧美色播在线播放| 国产亚洲一区精品| 亚洲激情六月丁香| 午夜精品久久久久| 欧美成人在线免费视频| 一本到高清视频免费精品| 欧美在线免费视频| 欧美第一黄色网| 国产日韩精品久久| 亚洲乱码久久| 久久精品一二三区| 亚洲久久一区二区| 久久九九99视频| 欧美午夜精品久久久| 在线观看成人网| 亚洲午夜精品一区二区| 美女亚洲精品| 亚洲自拍偷拍福利| 欧美精品播放| 狠狠色狠狠色综合日日91app| 夜色激情一区二区| 麻豆av福利av久久av| 亚洲午夜一区二区三区| 欧美国产欧美综合| 亚洲高清视频在线| 久久久夜色精品亚洲| 中文精品视频| 欧美精品在线一区| 亚洲国产成人久久综合一区| 午夜久久资源| 一区二区三区你懂的| 欧美激情网站在线观看| 在线观看91精品国产麻豆| 久久成人这里只有精品| 99日韩精品| 欧美日韩精品中文字幕| 最新日韩在线视频| 美女性感视频久久久| 欧美在线免费一级片| 国产精品日韩二区| 亚洲男人的天堂在线aⅴ视频| 欧美激情日韩| 美女国产精品| 亚洲国产日韩一级| 欧美国产亚洲视频| 久久综合999| 久久精品国产精品亚洲综合 | 欧美视频在线观看免费| 日韩亚洲在线| 亚洲狼人综合| 欧美日韩亚洲一区在线观看| 日韩视频精品| 亚洲看片一区| 欧美午夜精品久久久久久超碰| 一区二区三区高清视频在线观看| 亚洲国产片色| 欧美极品欧美精品欧美视频| 亚洲精品久久久久久下一站| 亚洲国产二区| 欧美日韩一卡二卡| 午夜精品一区二区在线观看 | 欧美亚洲专区| 亚洲成人自拍视频| 亚洲国产精品福利| 欧美午夜不卡视频| 久久都是精品| 久久精品国产一区二区三区免费看| 激情综合亚洲| 亚洲人体一区| 国产精品丝袜久久久久久app| 欧美一进一出视频| 老巨人导航500精品| 99精品免费网| 性18欧美另类| 亚洲欧洲一区二区天堂久久| 亚洲美女电影在线| 国产日韩在线看片| 亚洲欧洲一区二区在线观看| 欧美三级日本三级少妇99| 欧美一区二区三区喷汁尤物| 久久久久久久成人| 一区二区三区不卡视频在线观看 | 欧美午夜精品理论片a级按摩| 欧美在线看片| 欧美国产日韩一二三区| 欧美一区二区三区四区视频| 麻豆亚洲精品| 羞羞答答国产精品www一本| 久久精彩免费视频| 一本综合久久| 久久野战av| 午夜精品久久久久久99热软件| 久久久综合网站| 亚洲亚洲精品在线观看| 久久久久久**毛片大全| 亚洲欧美日本国产有色| 欧美成人激情视频| 久久精品成人一区二区三区| 欧美激情网站在线观看| 久久午夜色播影院免费高清| 欧美亚州一区二区三区| 欧美黄色小视频| 国产亚洲精品bv在线观看| 中文国产亚洲喷潮| 久久久久高清| 欧美在线免费播放| 国产精品porn| 亚洲精品乱码视频| **性色生活片久久毛片| 亚洲欧美日韩一区二区在线| 亚洲精品少妇| 老司机午夜精品视频| 久久婷婷蜜乳一本欲蜜臀| 国产精品白丝av嫩草影院| 亚洲精品国产精品乱码不99| 亚洲国产天堂久久综合网| 久久精品国产亚洲一区二区三区 | 国产精品久久一区主播| 亚洲人成网站777色婷婷| 亚洲二区免费| 久久久夜精品| 欧美承认网站| 亚洲国产人成综合网站| 久久男女视频| 欧美第一黄色网| 亚洲日本成人女熟在线观看| 麻豆精品一区二区综合av| 欧美成人在线影院| 亚洲精品综合| 欧美日韩八区| av成人国产| 欧美亚洲综合在线| 国产三级精品三级| 久久久999精品免费| 免费亚洲婷婷| 日韩一级黄色大片| 欧美午夜不卡视频| 亚洲欧美区自拍先锋| 久久视频国产精品免费视频在线| 国产主播一区| 免费h精品视频在线播放| 亚洲国产一区二区a毛片| 一区二区三区免费观看| 国产精品久久久久高潮| 性欧美xxxx视频在线观看| 久久综合亚州| 日韩午夜激情| 国产精品天美传媒入口| 久久久精品免费视频| 亚洲国产精品999| 亚洲一区精品电影| 国产一区二区三区在线播放免费观看 | 欧美成人免费大片| 日韩特黄影片| 国产精品嫩草久久久久| 久久精品人人做人人综合| 欧美激情在线有限公司| 在线一区观看| 激情av一区| 欧美日韩在线播放一区二区| 性刺激综合网| 亚洲美洲欧洲综合国产一区| 欧美怡红院视频| 亚洲日本成人| 国产一区二区丝袜高跟鞋图片 | 亚洲深夜影院| 日韩一级精品| 国产精品亚洲人在线观看| 久久亚洲二区| 亚洲一区二区三区精品在线观看 | 激情久久五月天| 欧美日韩一区二区在线视频| 欧美一区二区三区四区在线观看地址| 欧美激情性爽国产精品17p| 亚洲在线网站| 91久久极品少妇xxxxⅹ软件| 国产精品99一区二区| 麻豆91精品91久久久的内涵| 亚洲在线中文字幕| 日韩视频精品在线观看| 免费亚洲一区二区| 久久精品国产在热久久 | 在线观看欧美视频| 国产麻豆精品在线观看| 欧美日韩国产成人| 久久亚洲精品中文字幕冲田杏梨| 亚洲制服av| 亚洲视频在线视频| 一本久久综合亚洲鲁鲁| 亚洲激情一区| 欧美激情五月| 亚洲第一在线视频|