私はちょうどあなたが何もCOMに言及していない気づきました。もしそうでなければ、私はADOを提案したでしょう。最近私はRaw C++ code to display the names of tables in an SQL compact server using OLE DBのOLEDBコードを掲載しました。
あなたが希望する(つまり、COMを伴う)C++の答えに私のADODBを見たい場合はそうでない場合、私はADODB VBScriptの例を変換して働いてきた:C++でADODBを使用するには
Dim con, rs
Set con = CreateObject("ADODB.Connection")
REM con.Provider = "Microsoft.SQLLITE.MOBILE.OLEDB.3.0"
con.Provider = "Microsoft.SQLSERVER.CE.OLEDB.3.5"
con.Open "InsertYourDatabase.sdf"
Set rs = con.Execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES")
While not rs.EOF
WScript.Echo rs.Fields.Item(0).Value
rs.MoveNext
Wend
はやや困難です、しかし、可能です。次のC++コンソールアプリケーションは、ADODBライブラリに#importをを使用してこれを行う方法を示しています。あなたはOLEVIEWを使用することにより、ADODBのIDLを抽出することができます
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <oleauto.h>
#include <atlbase.h>
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = S_OK;
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
// Open a SQL Server CE 3.5 database.
CComPtr<_Connection> spConnection;
hr = spConnection.CoCreateInstance(CLSID_Connection);
//hr = spConnection->put_Provider(CComBSTR(L"Microsoft.SQLLITE.MOBILE.OLEDB.3.0"));
hr = spConnection->put_Provider(CComBSTR(L"Microsoft.SQLSERVER.CE.OLEDB.3.5"));
hr = spConnection->Open(CComBSTR(L"InsertYourDatabase.sdf"), CComBSTR(L""), CComBSTR(L""), -1);
// Execute a query.
CComPtr<_Recordset> spRecordset;
CComVariant varRecordsAffected;
hr = spConnection->Execute(CComBSTR(L"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"), &varRecordsAffected, -1, &spRecordset);
// Fetch the results.
VARIANT_BOOL bEOF = VARIANT_TRUE;
hr = spRecordset->get_EOF(&bEOF);
while (SUCCEEDED(hr) && bEOF != VARIANT_TRUE)
{
// Fetch the TABLE_NAME.
CComPtr<Fields> spFields;
hr = spRecordset->get_Fields(&spFields);
CComPtr<Field> spField;
hr = spFields->get_Item(CComVariant((int) 0), &spField);
CComVariant varTableName;
hr = spField->get_Value(&varTableName);
// Display the record.
if (varTableName.vt == VT_BSTR)
{
wprintf(L"%s\n", V_BSTR(&varTableName));
}
// Move to the next record.
hr = spRecordset->MoveNext();
bEOF = VARIANT_TRUE;
hr = spRecordset->get_EOF(&bEOF);
}
// Release smart pointers.
spRecordset = NULL;
spConnection = NULL;
CoUninitialize();
return 0;
}
(私のPC上でそれがCの下のVisual Studioにインストールされていました:\ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ Bin \ OleView.exe)。 Cに移動
- [ファイル]> [ビュータイプライブラリ...
- :あなたはOLEVIEWランニングをした後の\ Program Files \ Common Files \システム\ ADO \は
- をMSADO15.DLLオープン
をクリックします
これは、C++での使用に役立つADODBライブラリの完全な構文を提供します。 Microsoft MSDNのADO API Referenceを参照することもできます。
「お楽しみ」。しかし、SqlServerの「ネイティブ」インターフェイスはODBCでした。 OTLを試してみてください:http://otl.sourceforge.net/ – CapelliC