產品功能

提供轉檔元件,可用程式串接該元件,打入自定義的查詢語法,來取用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+操作文件[點我連結]

產品使用

輸入

產品名稱 方法名稱 輸入參數 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)

本方案架構說明

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檔。如果方便,亦請提供串接程式碼(可先自行移除商業邏輯),並告知使用的語言和運行環境。