質問者
ADO例外で補足される_com_errorのエラーについて

質問
-
御世話になっております。
現在、VC++でADOを使用したPG開発を行っております。
当該PGでは、SQL文実行時に例外が発生した場合にエラーの種類によって処理を制御する必要があり、ADO例外として補足される
_com_errorオブジェクトから取得できるエラーコード(ErrorもしくはWCode関数により取得)の値を判断して処理を分岐することを考えております。
ただ、ADOエラーやSQLServerのシステムエラーは見つかるのですが、COMに関するエラーコード一覧は見つかりませんでした。
_comm_errorのErrorやWCodeで取得できるコードをADOエラーやSQLServerのエラーコードと照らし合わせても見つからないので、_comm_errorから取得できるエラーコードとは関係ないのでしょうか?
であれば、_comm_errorで取得できるエラーコードはSQLServerが拡張したCOMエラーコードのような気がしますが、このエラーコードの一覧は無いのでしょうか。
ちなみに、以下の例外の場合のコードは以下のようでした。
何か情報をご存知の方がおられましたら、宜しく御願いいたします。
・一意制約(WCode:3092/Error:0x80040E14)
・算術オーバーフロー(WCode:3159/Error:0x80040E57)
■開発環境
OS:Windows Server 2012
開発言語:Visual C++ 2013
DB:SQL Server 2014
すべての返信
-
参考までに得られたHRESULT(_com_error::Error)は何でしょうか?
Common HRESULT Valuesにほんの少し載っていました。後はヘッダーファイルを見るくらいしかないかと。
ちなみにVisual C++ 2013ですと、_com_ptr_tの他にATL::CComPtrやMicrosoft::WRL::ComPtrなんかも用意されています。
-
0x80040E14は、DB_E_ERRORSINCOMMANDで、「なにかエラーがあるよ」程度のエラーコードですね。
https://msdn.microsoft.com/ja-jp/library/cc431524.aspx あたりにある程度は一覧があります(ADOCEですが)本当のSQLServerのエラーコード(UNIQUE INDEXの重複のため挿入不可、等)は、例外を捕まえたあと、ADOConnectionのErrorsコレクションから取得する必要があります。
https://msdn.microsoft.com/ja-jp/library/cc407852.aspxjzkey