產品功能

提供轉檔元件,可用程式串接該元件,打入自定義的查詢語法,來取用CMoney財經資料庫的資源。

環境需求

產品限制

產品項目

元件名稱 產品名稱 功能 安裝檔下載
cmadox.dll CMADODB
  • 一般查詢
  • 自訂報表查詢
  • 篩選條件查詢

Windows 32位元:[點我下載]

Windows 64位元:[點我下載]

cmadox5.dll CMADODB5
  • 一般查詢

Windows 32位元:[點我下載]

Windows 64位元:[點我下載]

安裝與註冊流程

  1. 請下載安裝檔到本機。
  2. 請以系統管理員執行該安裝檔,並且按下[安裝]。
    安裝畫面
  3. 安裝程式會將元件放到系統資料夾底下,並且進行註冊,執行後會自動關閉。

手動註冊流程

有時候可能因為權限或環境問題,安裝檔無法註冊元件成功時,請參照以下流程處理。

電腦OS位元 系統資料夾路徑 cmd指令
32位元 C:\Windows\System32
regsvr32 cmadox.dll
64位元 C:\Windows\SysWOW64
regsvr32 C:\Windows\SysWOW64\cmadox.dll
  1. 請將安裝檔解壓縮,解壓縮後的資料夾內應該會有cmadox.dll或cmadox5.dll。
  2. 請先查詢您的電腦OS位元
  3. 參照上表,找到您的系統資料夾路徑。
  4. 將1得到的.dll檔,放到系統資料夾路徑下。
  5. 以系統管理員身分開啟cmd(或左下角>搜尋>輸入"執行">會跳出一個執行視窗)
    執行
  6. 在命令行中(或執行的藍框中)輸入對應的cmd指令,並且執行。

Windows Server 主機 註冊特別事項

如果您的OS環境為Windows Server,請對COM+進行註冊。

請參照COM+操作文件[點我連結]

  • COM+元件註冊後,請將專案透過進階設定將[啟用32位元應用程式]選擇為TRUE(Adox元件不支援建置目標64位元的專案)
    設定
  • 產品使用

    輸入

    產品名稱 方法名稱 輸入參數 SQL查詢語法 示例
    CMADODB Execute
    順位 說明 型態 內容
    0 功能碼 字串 "5"
    1 SQL查詢語法 字串 自定義語法
    SELECT * FROM 日收盤表排行 WHERE (日期 = '20041110') ORDER BY 股票代號
    CMADODB Execute
    順位 說明 型態 內容
    0 功能碼 字串 "2"
    1 SQL查詢語法 字串 自定義語法
    SELECT * FROM 技術與籌碼面速覽
    CMADODB Execute
    順位 說明 型態 內容
    0 功能碼 字串 "3"
    1 SQL查詢語法 字串 自定義語法
    2 是否顯示股票名稱
    欄位(選擇性參數)
    字串 預設值為 false

    基本面篩選/月營收動能向上/20060207

     

    • 基本面篩選:直接使用您在知識管理庫中,看到的篩選種類標題名稱

    • 月營收動能向上:直接使用您在知識管理庫中,已經設好儲存的篩選條件名稱
      20060207:用來篩選的基準日期,若未給定表示使用最新ㄧ天的日期來篩選資料
    CMADODB5 CMExecuteOLEDB
    順位 說明 型態 內容
    0 功能碼= 字串 "5"
    1 資料庫名稱/IP 字串 資料庫名稱/IP
    2 資料庫Port 字串 資料庫Port
    3 SQL查詢語法 字串 自定義語法
    SELECT * FROM 日收盤表排行 WHERE (日期 = '20041110') ORDER BY 股票代號"
    CMADODB5 CMExecuteSQLNCLI11
    可用TLS1.2協定來查詢資料。 
    同上 同上

    動態連結代號

    項目 語法 SQL查詢語法 示例
    台股–交易所代號 <CM代號,1> SELECT * FROM [季財報(現金流量單季)] WHERE 年季='201003' AND 股票代號 IN <CM代號,1>
    台股–細產業分類 <CM產業,303> SELECT * FROM [季財報(現金流量單季)] WHERE 年季='201003' AND 股票代號 IN <CM產業,303>
    台股–個股特殊分類(不含指數彙編) <CM特殊,1> SELECT * FROM [季財報(現金流量單季)] WHERE 年季='201003' AND 股票代號 IN <CM特殊,1>
    非台股 <CM一般,日本,重要國際指數,國家> SELECT * FROM [重要國際指數] WHERE 日期='20110120' AND 代號 IN <CM一般,日本,重要國際指數,國家>
    同上 同上 SELECT * FROM [重要國際指數] WHERE 日期='20110120' AND 代號 IN <CM一般,日本,重要國際指數,國家>
    SELECT * FROM [權證基本資料表] WHERE 年度='2011' AND 代號 IN <CM一般,一般型認售權證,權證基本資料表,類型>
    資料表前後請留空白,若表格名稱內含有中括號,則表格名稱請不要再用中括號包住

    輸出

    返回ADODB.RecordSet型態的資料集合

    其他屬性

    .ErrorMessage:取得錯誤訊息

    錯誤訊息與Log紀錄

    當元件未預期執行時,可以到↓查看是否有Log紀錄,再提交給CMoney人員。

    C:\Program Files (x86)\CMoney\CMAdox_LOG\

    C:\Program Files\CMoney\CMAdox_LOG\

    C:\Users\user1\AppData\Roaming\

    *user1是當前登入帳戶名稱

    以程式串接ADOX元件

    C#串接說明

    開發環境引用元件

    1. 開啟程式開發介面(以下以Vistual Studio舉例),並開啟您要開發或維運的專案
    2. 專案參考設定:
      專案 > 參考 > 加入參考 > COM頁籤 > 選擇CMADODB或CMADODB5 > 確定
      * PS 選擇清單中可能有很多個相同的項目一起出現,擇一勾選就可以,它會一起勾。

    撰寫程式碼以使用元件

    [Adox]

    /// <summary>
    /// 查詢指定SQL命令並返回資料表
    /// </summary>
    /// <param name="sqlCommandText">SQL命令</param>
    /// <returns>查詢結果</returns>
    public DataTable Execute(string sqlCommandText)
    {
    ADODB.Recordset recordset = new ADODB.Recordset();
    CMADODB.CMConnection conn = new CMADODB.CMConnection();

    try
    {
    using (System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter())
    {
    DataTable dt = new DataTable();

    recordset = conn.CMExecute("5", sqlCommandText);

    if (!string.IsNullOrEmpty(conn.ErrorMessage))
    {
    throw new Exception(conn.ErrorMessage);
    }

    if (recordset != null && recordset.RecordCount > 0)
    {

    adapter.Fill(dt, recordset);
    return dt;
    }
    else
    {
    throw new Exception("查無資料");
    }
    }
    }
    catch (Exception ex)
    {
    throw new Exception($"查詢例外:{ex}");
    }
    finally
    {
    if (recordset != null)
    {
    if (recordset.State != 0)
    {
    recordset.Close();
    }
    recordset = null;
    }
    conn = null;
    }
    }

    [Adox5]

    /// <summary>
    /// 查詢指定SQL命令並返回資料表
    /// </summary>
    /// <param name="sqlCommandText">SQL命令</param>
    /// <returns>查詢結果</returns>
    public DataTable Execute(string sqlCommandText)
    {
    ADODB.Recordset recordset = new ADODB.Recordset();
    CMADODB5.CMConnection conn = new CMADODB5.CMConnection();
    try
    {
    using (System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter())
    {
    DataTable dt = new DataTable();

    recordset = conn.CMExecuteOLEDB("5", "伺服器IP", "伺服器Port", sqlCommandText);

    if (!string.IsNullOrEmpty(conn.ErrorMessage))
    {
    throw new Exception(conn.ErrorMessage);
    }

    if (recordset != null && recordset.RecordCount > 0)
    {
    adapter.Fill(dt, recordset);
    return dt;
    }
    else
    {
    throw new Exception("查無資料");
    }
    }
    }
    catch (Exception ex)
    {
    throw new Exception($"查詢例外:{ex}");
    }
    finally
    {
    if (recordset!=null)
    {
    if (recordset.State != 0)
    {
    recordset.Close();
    }
    recordset = null;
    }
    conn = null;
    }
    }

     

    範例測試程式

    產品名稱 測試程式(請解壓縮後執行內部的DemoForm.exe) 程式碼
    (請解壓縮後可見原始碼)
    CMADODB 點我下載 點我下載
    CMADODB5 點我下載 點我下載

     

    本方案架構說明

    DemoAdox(5).slu

    └-- DemoForm.csproj:作為客戶端應用程式,示範外部程式如何去呼叫DemoLib內的類別。

    └-- DemoLib.csproj:作為底層,內部主要是包裝adox(5)的查詢以及ADODB.Recordset轉換為DataTable。

     

    常見Q&A

    Q: 擷取元件 (CLSID 為 {FA04616C-9B80-4D61-8228-5BC1963E07CB}) 的 COM Class Factory 失敗,因為發生下列錯誤: 80040154 類別未登錄 (發生例外狀況於 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

    A: 請先嘗試手動註冊流程

    Q: 我寫的程式在開發端測試運行沒有問題,但是佈署到IIS或其他主機時,就會出錯。

    A: 請先確認遠端目的主機,也有進行元件註冊流程。

    Q: 我還是有問題

    A: 請聯絡CMoney,並提供Log檔。如果方便,亦請提供串接程式碼(可先自行移除商業邏輯),並告知使用的語言和運行環境。