<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>
    以文本方式查看主題

    -  曙海教育集團論壇  (http://www.hufushizhe.com/bbs/index.asp)
    --  Oracle數據庫  (http://www.hufushizhe.com/bbs/list.asp?boardid=65)
    ----  Oracle 數據庫常用方法封裝類  (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=65&id=2497)

    --  作者:wangxinxin
    --  發布時間:2010-12-11 10:53:01
    --  Oracle 數據庫常用方法封裝類
    #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);
    }

    主站蜘蛛池模板: 日本高清H色视频在线观看| 色综合a怡红院怡红院首页| 无码中文资源在线播放| 亚洲欧美日韩一区在线观看| 精品久久国产视频| 国产成人免费高清在线观看| 9久久这里只有精品国产| 性猛交╳xxx乱大交| 亚洲1区1区3区4区产品乱码芒果| 欧美超强性xxxxx| 吃奶摸下激烈免费视频免费| 野花香社区在线视频观看播放| 国产自产在线视频一区| 一级特黄录像在线观看| 无码精品尤物一区二区三区| 亚洲人成在线免费观看| 欧美日韩视频在线| 内射一区二区精品视频在线观看| 色多多视频官网| 国产熟睡乱子伦视频观看软件 | 久久夜色精品国产噜噜亚洲AV| 欧美国产日韩久久mv| 免费一级毛片在线播放傲雪网| 精品欧美一区二区三区在线| 国产在线无码视频一区二区三区| 7777精品伊人久久久大香线蕉| 在线观看国产精品va| 中国明星16xxxxhd| 打开双腿粗大噗呲噗呲h| 久激情内射婷内射蜜桃| 最近最新视频中文字幕4| 亚洲白色白色在线播放| 激情内射日本一区二区三区 | 日本精品一区二区三本中文| 亚洲国产成人久久综合区| 欧美最猛黑人xxxx| 免费一级毛片在级播放| 精品久久久久久无码人妻| 国产va免费精品高清在线| 色香蕉在线观看| 国产成熟女人性满足视频|