<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>

    曙海教育集團論壇開發語言培訓專區Oracle數據庫 → Oracle 數據庫常用方法封裝類


      共有6537人關注過本帖樹形打印

    主題:Oracle 數據庫常用方法封裝類

    美女呀,離線,留言給我吧!
    wangxinxin
      1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


    加好友 發短信
    等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
    Oracle 數據庫常用方法封裝類  發帖心情 Post By:2010-12-11 10:53:01

    #include <TChar.h>
    #include <stdio.h>
    #include <stdlib.h>

    #pragma warning (disable:4251)
    #pragma warning (disable:4313)

    // 配置數據源必須頭文件
    #include <odbcinst.h>
    /*---------------------------------------------------------------------------*/
    /*-------------------------- OracleDataBaseCtrl.h ---------------------------*/
    /*---------------------------------------------------------------------------*/
    /*
    模塊名稱:OracleDataBaseCtrl.dll
    版    本:0.1 Alpha
    版    權:
    模塊功能:Oracle 數據庫操作類
    作    者:wlzqi
    作者郵箱:mailto:wlzqin@sina.com
    建立時間:2006年7月3日
    最后修改:by wlzqi 2006年7月4日
    修改歷程:
    注意事項:1.支持 UNICODE、ANSI 編碼
        2.當使用 get_collect_value 方法時,如果返回值是 NULL 則會發生異常,請注意處理。
    備  注: 測試環境 WinXp + Vc 2003
    使用舉例:
      ★// 定義對象
      COracleDataBaseCtrl m_OracleDataBase;
      ★// 1.打開數據庫
      m_OracleDataBase.open_database(數據庫MDB文件路徑, 用戶名, 密碼);   // 如沒有用戶名和密碼可以不寫
      ★// 2.關閉數據庫
      m_OracleDataBase.close_database();
      ★// 3.打開數據庫表
      // m_OracleDataBase.open_table(表名);
      ★// 4.刪除表
      m_OracleDataBase.del_table(表名);
      ★// 5.關閉數據庫表
      m_OracleDataBase.close_table();
      ★// 6.遍歷數據庫表
      PTSTR ptTableName;
      for (bool bfOk = m_OracleDataBase.first_table_name(ptTableName); bfOk; bfOk = m_OracleDataBase.next_table_name(ptTableName)) {
       if (lstrcmp(ptTableName, _TEXT(\\\"\\\")) == 0) continue;
       // 得到表名
       MessageBox(ptTableName);
      }
      ★// 7.添加字段
      m_OracleDataBase.add_field(表名, 字段);  // 字段形式 _TEXT(\\\"Field1 INTEGER, Field2 INTEGER, ...\\\")
      ★// 8.刪除字段
      m_OracleDataBase.del_field(表名, 字段名);
      ★// 9.獲取字段數量
      int nFieldCount = m_OracleDataBase.get_field_count(表名);
      ★// 10.遍歷字段
      for (int i = 0; i < nFieldCount; i++) {
       PCTSTR pctFieldName = m_OracleDataBase.get_field_name(i, 表名);
       MessageBox(pctFieldName);
      }
      ★// 11.獲取字段類型
      DataTypeEnum FieldType;
      m_OracleDataBase.get_field_type(字段號, FieldType);  // 字段號:字段的序號(從 0 開始)
      ★// 12.執行 SQL 語句
      m_OracleDataBase.execute_sql(SQL 語句);
      ★// 13.獲取數據庫內容
      m_OracleDataBase.execute_sql(_TEXT(\\\"SELECT * FROM 表名\\\"));  // 查詢所有數據
      m_OracleDataBase.execute_sql(_TEXT(\\\"SELECT COUNT(*) FROM 表名\\\"));  // 得到數據庫記錄條數
      _variant_t vtItemCount = m_OracleDataBase.get_collect_value(long(0));
      _bstr_t bsValue = vtItemCount;  // 將結果格式化為字符串
      ★// 14.遍歷數據庫所有內容
      TCHAR szSQL[MAX_PATH];
      _stprintf(szSQL, _TEXT(\\\"SELECT * FROM %s\\\"), ptTableName);  // 格式化 SQL 語句
      m_OracleDataBase.execute_sql(szSQL);   // 執行 SQL 語句
      m_OracleDataBase.first();  // 將游標移動到第一條數據
      _bstr_t bsValue;
      for (int i = 0; i < vtItemCount.intVal; i++) {    // 循環所用行
       if (m_OracleDataBase.Is_BOF() == 1) break;   // 如到了表最后則退出循環
       for (int j = 0; j < nFieldCount; j++) {   // 循環所有列
        variant_t vtValue = m_OracleDataBase.get_collect_value(long(j));  // 格式化得到的每列數據為字符串
        bsValue = _bstr_t(vtValue.vt == VT_NULL ? _TEXT(\\\"\\\") : vtValue.vt);
       }
       bfOk = m_AccessDataBaseCtrl.next();   // 移動到下一列
      }
      ★// 15.刪除當前行
      m_OracleDataBase.del_collect_value();
      ★// 16.注冊數據庫
      COracleDataBaseCtrl::Configuration_DataBaseSource(DNS, 數據庫DB文件路徑, 描述);
      ★// 17.其它還有一些請參:OracleDataBaseCtrl.h 文件
      ★// 18.反注冊 COM   CoUninitialize();
    */
    #pragma once

    #pragma warning(disable:4146)
    #import \\\"c:\\\\Program Files\\\\Common Files\\\\System\\\\ado\\\\Msado15.dll\\\" \\\\
    no_namespace \\\\
    rename (_TEXT(\\\"EOF\\\"), _TEXT(\\\"adoEOF\\\"))
    #pragma warning(default:4146 )
     
     
    #ifdef ORACLEDATABASECTRL_EXPORTS
    #define ORACLEDATABASECTRL_API __declspec(dllexport)
    #else
    #define ORACLEDATABASECTRL_API __declspec(dllimport)
    #endif
     

    // 此類是從 OracleDataBaseCtrl.dll 導出的
    class ORACLEDATABASECTRL_API COracleDataBaseCtrl {
    public:
     COracleDataBaseCtrl(void);
     // TODO: 在此添加您的方法。
     ~COracleDataBaseCtrl();
     //****************************************************************************
    private:
     _ConnectionPtr m_pConnection;
     _RecordsetPtr m_pRecordset;
     HRESULT hr;
     //****************************************************************************
    public:
     // 打開數據庫
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT open_database(PCTSTR pctsUser, PCTSTR pctsPass, PCTSTR pctsServer, long Options = adModeUnknown);
     // 斷開數據庫
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT close_database();
     //****************************************************************************
     // 打開表
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT open_table(PCTSTR pctsTableName, long Options = adCmdText);
     // 關閉表
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT close_table();
     // 創建表創建表和字段
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT create_table(PCTSTR pctsTableName, PCTSTR pctsField, long Options = adCmdText);
     // 刪除表
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT del_table(PCTSTR pctsTableName, long Options = adCmdText);
     // 添加字段
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT add_field(PCTSTR pctsTableName, PCTSTR pctsField, long Options = adCmdText);
     // 刪除字段
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT del_field(PCTSTR pctsTableName, PCTSTR pctsFieldName, long Options = adCmdText);
     // 得到表的字段數量
     unsigned long get_field_count(PCTSTR pctsTableName);
     // 得到表的字段名
     PCTSTR get_field_name(unsigned long unFieldIndex, PCTSTR pctsTableName);
     // 得到字段的類型
     // 參數:pFieldType [OUT] 字段類型
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT get_field_type(unsigned long unFieldIndex, DataTypeEnum &FieldType);
     // 遍歷所有表名(第一個)
     // 參數:ptTableName [OUT]  遍歷到的表名
     // 注意:if (lstrcmp(ptTableName, _TEXT(\\\"\\\")) != 0 ) 表名才有效
     // 返回:false 出錯或遍歷完畢
     bool first_table_name(PTSTR &ptsTableName);
     // 遍歷所有表名(下一個)
     // 參數:ptTableName [OUT]  遍歷到的表名
     // 注意:if (lstrcmp(ptTableName, _TEXT(\\\"\\\")) != 0 ) 表名才有效
     // 返回:false 出錯或遍歷完畢
     bool next_table_name(PTSTR &ptsTableName);
     //****************************************************************************
     // 執行 SQL 語句
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT execute_sql(PCTSTR pctsSQL, long Options = adCmdText);
     // 是否到記錄集末端(0--沒有,1--是 -1--錯誤)
     int Is_BOF(void);
     // 跳向前一個記錄
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT prev(void);
     // 遍歷到第一個記錄
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT first(void);
     // 遍歷到下個記錄
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT next(void);
     // 遍歷到最后一個記錄
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT last(void);
     // 更新(確認)記錄
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT update(void);
     // 重新查詢
     // 用 SUCCEEDED 或 FAILED 判斷返回值
     HRESULT reQuery(long Options = 0);
     // 記錄集是否為空(0--沒有,1--是 -1--錯誤)
     int Is_Empty(void);
     // 獲取數據
     _variant_t get_collect_value(PCTSTR pctsCollectName);
     // 獲取數據
     _variant_t get_collect_value(long lCollectIndex);
     // 設置數據
     bool put_collect_value(PCTSTR pctsCollectName, _variant_t vtValue);
     // 設置數據
     bool put_collect_value(long lCollectIndex, _variant_t vtValue);
     // 刪除一行數據(當前)
     bool del_collect_value();
     //****************************************************************************
     // 配置數據源
     static bool Configuration_DataBaseSource(PCTSTR pctDNS, PCTSTR pctDBPath, PCTSTR pctDescription);
    };
    /*---------------------------------------------------------------------------*/
    /*-----------------------End OracleDataBaseCtrl.h ---------------------------*/
    /*---------------------------------------------------------------------------*/
     
     
    /*---------------------------------------------------------------------------*/
    /*------------------------ OracleDataBaseCtrl.cpp ---------------------------*/
    /*---------------------------------------------------------------------------*/
    // OracleDataBaseCtrl.cpp : 定義 DLL 應用程序的入口點。
    //
    #include \\\"stdafx.h\\\"
    #include \\\"OracleDataBaseCtrl.h\\\"

    //****************************************************************************
    // 數據庫表名
    TCHAR * pszTableName;
    // 數據庫字段名
    TCHAR * pszFieldName;
    //****************************************************************************
    COracleDataBaseCtrl::COracleDataBaseCtrl()
    : m_pConnection(NULL)
    , m_pRecordset(NULL)
    , hr(NULL)
    {
     // 初始化COM
     if(FAILED(::CoInitialize(NULL))) return;
     pszTableName = (TCHAR *)malloc(MAX_PATH);
     if (pszTableName == NULL) return;
     pszFieldName = (TCHAR *)malloc(MAX_PATH);
     if (pszFieldName == NULL) return;
    }
    COracleDataBaseCtrl::~COracleDataBaseCtrl()
    {
     // 反注冊COM
     CoUninitialize();
     if (pszTableName != NULL) free(pszTableName);
     if (pszFieldName != NULL) free(pszFieldName);
    }

    支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

    返回版面帖子列表

    Oracle 數據庫常用方法封裝類








    簽名
    主站蜘蛛池模板: 精品久久久久久中文字幕大豆网 | 青青青手机视频| 女网址www女大全小| 五月婷婷丁香在线| 欧美精品stoya在线| 同性spank男男免费网站| 韩国一级免费视频| 国产精品露脸国语对白| 东北大炕王婶小说| 日本三级不卡视频| 亚洲国产精品无码久久| 爱情岛亚洲论坛福利站| 国产jizzjizz免费看jizz| 香港台湾日本三级纶理在线视| 在线亚洲人成电影网站色www| 久久99精品久久久久子伦| 日韩在线看片免费人成视频播放| 亚洲精品无码专区在线| 男女下面一进一出无遮挡gif| 国产亚洲婷婷香蕉久久精品| 3d动漫精品一区视频在线观看| 天堂8在线天堂bt| 中文字幕无线码一区| 日本道在线播放| 亚洲国产欧美日韩精品一区二区三区 | 666永久视频在线| 在线精品免费视频无码的| 中文字幕日韩人妻不卡一区| 日本大片免aaa费观看视频| 亚洲国产夜色在线观看| 欧美激情一区二区三区在线| 免费看黄a级毛片| 精品日韩欧美一区二区三区| 国产成人va亚洲电影| 91se在线视频| 国内xxxx乱子另类| xxxxx做受大片视频| 岳打开双腿让我进挺完整篇| 久久亚洲综合色| 日韩a级毛片免费观看| 亚洲国产精品毛片AV不卡在线|