• <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>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            使用OTL進行數據庫編程

            來源:http://www.sitelife.cn/bbs/thread-1871-1-1.html


            操作環境:
            1. 操作系統:Windows XP Professional with SP2。
            2. 編程環境:Visual C++ 6.0 with SP6。
            3. 數據庫環境:Access 2003。
            OTL簡介:
            OTL 是 Oracle, Odbc and DB2-CLI Template Library 的縮寫,是一個C++編譯中操控關系數據庫的模板庫,它目前幾乎支持所有的當前各種主流數據庫,例如Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。OTL中直接操作Oracle主要是通過Oracle提供的OCI接口進行,進行操作DB2數據庫則是通過CLI接口來進行,至于MS的數據庫和其它一些數據庫,則OTL只提供了ODBC來操作的方式。當然Oracle和DB2也可以由OTL間接使用ODBC的方式來進行操縱。
            在MS Windows and Unix 平臺下,OTL目前支持的數據庫版本主要有:Oracle 7 (直接使用 OCI7), Oracle 8 (直接使用 OCI8), Oracle 8i (直接使用OCI8i), Oracle 9i (直接使用OCI9i), Oracle 10g (直接使用OCI10g), DB2 (直接使用DB2 CLI), ODBC 3.x ,ODBC 2.5。OTL最新版本為4.0,參見http://otl.sourceforge.net/,下載地址http://otl.sourceforge.net/otlv4_h.zip
            優點:
                  a. 跨平臺
                  b. 運行效率高,與C語言直接調用API相當
                  c. 開發效率高,起碼比ADO.net使用起來更簡單,更簡潔
                  d. 部署容易,不需要ADO組件,不需要.net framework 等
            缺點:
                  a. 說明文檔以及范例不足夠豐富(暫時性的)
                 其實現在它提供有377個使用范例可參考,下載地址:http://otl.sourceforge.net/otl4_examples.zip
            建立數據源
            1.依次點擊“開始->控制面板”,打開“控制面板”界面,雙擊“管理工具”,然后再雙擊“數據源(ODBC)”,就打開了“ODBC數據源管理器”,選擇“系統DSN”。
            2.單擊“添加”,彈出“創建新數據源”對話框,選擇“Microsoft Access Driver(*.mdb)”。
            3.點擊“完成”,彈出“ODBC Microsoft Access安裝”對話框,單擊“創建”,開始創建數據庫,彈出“新建數據庫”對話框,添加數據庫名稱my_db和選擇數據庫存放目錄,單擊“確定”,創建完成,然后添加數據源名:my_db。點擊“確定”。
            4.然后在系統數據源中就有我們剛才添加的數據源。
            5.單擊“確定”,完成數據源的創建。
            OTL編程
            下面我們用一個實例來說明:
            1. 創建數據表:TestTable ( ColumA int , ColumB varchar(50),ColumC varchar(50) )
            2. 插入100條數據,ColumA 為數據的 id 范圍:0-99 , ColumB=”Test Data %d” , 其中 %d=id 。
            3. 刪除表中ColumA 中小于10和大于90的數據。
            4. 將ColumA為3的倍數的記錄中ColumC更新為ColumB的內容。
            具體代碼為:
            #include <iostream>
            using namespace std;
            #include 
            <stdio.h>
            #include 
            <string.h>
            #include 
            <stdlib.h>
            #define OTL_ODBC // 編譯 OTL 4.0/ODBC
            // #define OTL_ODBC_UNIX // 如果在Unix下使用UnixODBC,則需要這個宏
            #include "otlv4.h" // 包含 OTL 4.0 頭文件
            otl_connect db; // 連接對象

            //此函數完成插入100條數據,ComulA為數據的id,范圍為0-99,
            //ColumB="Test Data %d",其中%d=id
            void insert()  
            // 向表中插入行

            // 打開一個通用的流,以模板的方式向表中插入多項數據
            otl_stream
              o(
            1// 流的緩沖值必須設置為1
              "insert into TestTable values(:f1<int>,:f2<char[50]>,:f3<char[50]>)"
              
            // SQL 語句
              db  // 連接對象
              );
            char tmp1[32];
            char tmp2[30];

            for(int i=0;i<100;++i){
              sprintf(tmp1,
            "Test Data %d",i);
              sprintf(tmp2,
            "");
              o
            <<i<<tmp1<<tmp2;
            }


            }

            //此函數完成刪除表中ColumA中小于10和大于90的數據
            void delete_rows()

            long rpc=otl_cursor::direct_exec(db,"delete from TestTable where ColumA<10 or ColumA>90");
            // rpc是作用效果的返回值,otl_cursor::direct_exec為直接執行sql語句
            cout<<"Rows deleted: "<<rpc<<endl;
            }


            //此函數完成將ColumA為3的倍數的記錄中ColumC更新為ColumB的內容
            void update()
            // 更新表
            {
            otl_stream 
              o(
            1// 緩沖值
              "UPDATE TestTable "
              
            "   SET ColumC=:f2<char[50]> "
              
            " WHERE ColumA=:f1<int>"
                    
            // UPDATE 語句
              db // 連接對象
              );
            otl_stream c(
            1,"select ColumB from TestTable where ColumA=:f3<int>",db);
            char temp[10];
            for(int i=10;i<91;i++)
            {
              
            if(i%3==0)
              
            {
               c 
            << i;
               c 
            >> temp;
               o 
            << temp << i;
              }

            }


            }


            int main()
            {
            otl_connect::otl_initialize(); 
            // 初始化 ODBC 環境
            try{
              
              db.rlogon(
            "UID=scott;PWD=tiger;DSN=my_db"); // 連接到 ODBC
              
            //或者使用下面的連接語句方式。 
              
            //  db.rlogon("scott/tiger@firebird"); // connect to ODBC, alternative format
              
            // of connect string 
              
              otl_cursor::direct_exec
               (
               db,
               
            "drop table TestTable",
               otl_exception::disabled 
            // disable OTL exceptions
               ); // drop table
              
              
            //這里完成表的創建
              otl_cursor::direct_exec
               (
               db,
               
            "create table TestTable(ColumA int, ColumB varchar(50),ColumC varchar(50))"
               );  
            // create table
              
              insert(); 
            // insert records into the table
              
            //  update(10); // update records in the table
              delete_rows();
              update();
              
            }


            catch(otl_exception& p)// intercept OTL exceptions
              cerr<<p.msg<<endl; // print out error message
              cerr<<p.stm_text<<endl; // print out SQL that caused the error
              cerr<<p.sqlstate<<endl; // print out SQLSTATE message
              cerr<<p.var_info<<endl; // print out the variable that caused the error
            }


            db.logoff(); 
            // disconnect from the database

            return 0;

            }

            posted on 2008-06-13 00:08 楊粼波 閱讀(2186) 評論(1)  編輯 收藏 引用

            評論

            # re: 使用OTL進行數據庫編程 2008-07-17 15:02 玉勒

            多謝,很經典.
            不過我不知道這里uid和密碼是這個,UID=scott;PWD=tige
            我寫其他的沒影響阿,建access 時也沒有要設置密碼之類的
              回復  更多評論   

            影音先锋女人AV鲁色资源网久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久国产劲爆AV内射—百度| 久久青青草原亚洲av无码app | 麻豆国内精品久久久久久| 久久国产亚洲精品无码| 亚洲国产精品久久久久| 久久精品草草草| 国产精品欧美久久久天天影视| 久久亚洲国产最新网站| 久久精品成人免费国产片小草| 久久精品国产91久久麻豆自制 | 久久最近最新中文字幕大全 | 国产精品青草久久久久福利99| 无码人妻少妇久久中文字幕蜜桃| 久久精品国产一区二区三区不卡| 亚洲AV无码久久精品色欲| 久久99国产一区二区三区| 国产精品99久久久久久宅男 | 武侠古典久久婷婷狼人伊人| 亚洲∧v久久久无码精品| 久久影院午夜理论片无码| 99久久国语露脸精品国产| A级毛片无码久久精品免费| 人妻无码精品久久亚瑟影视| 久久精品成人国产午夜| 国产精品久久久久AV福利动漫| 久久r热这里有精品视频| 蜜臀av性久久久久蜜臀aⅴ| 国产99久久精品一区二区| 久久天天躁狠狠躁夜夜avapp| 久久涩综合| 久久久久免费视频| 久久久久人妻一区精品| 国内精品久久久久久久涩爱| 91精品国产91久久久久久蜜臀| 国产精品久久久久影视不卡| 久久99久久99小草精品免视看| 国内精品伊人久久久久| 中文字幕久久欲求不满| 久久精品国产亚洲Aⅴ香蕉|