4,012
社区成员
发帖
与我相关
我的任务
分享
IID iid_connection = {0x113033DE, 0xF682, 0x11d2, {0xBB, 0x62, 0x00, 0xc0, 0x4f, 0x68, 0x0a, 0xcc}};
IID iid_recordset = {0x113033F6, 0xF682, 0x11d2, {0xBB, 0x62, 0x00, 0xc0, 0x4f, 0x68, 0x0a, 0xcc}};
TCHAR g_szAdocConnId[] = TEXT("ADOCE.Connection.3.1");
TCHAR g_szAdocRsdId[] = TEXT("ADOCE.Recordset.3.1");
IADOCEConnection* m_adoCon = NULL;
IADOCERecordset* m_adoRs = NULL;
IADOCEFields* m_adoFields = NULL;
IADOCEField* m_adoField = NULL;
CString cs;
CString constr = _T("Database=\\NandFlash\\111.sdf;Password=111;"); //连接字符串
CString strsql = _T("select * from ttt");
CLSID tclsid;
HRESULT hr = CLSIDFromProgID(g_szAdocConnId, &tclsid);
if (FAILED(hr))
{
ShowMsg("CLSIDFromProgID Failed");
return;
}
//创建ado连接对象
hr = CoCreateInstance(tclsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, iid_connection, (LPVOID*)&m_adoCon);
if (FAILED(hr) || !m_adoCon)
{
ShowMsg("CoCreateInstance Failed");
return;
}
hr = m_adoCon->put_Provider(TEXT(/*"cedb"*/"Microsoft.SQLSERVER.OLEDB.CE.3.5"));
if (FAILED(hr))
{
ShowMsg("put_Provider Failed");
goto Exit;
}
hr = CLSIDFromProgID(g_szAdocRsdId, &tclsid);
if (FAILED(hr))
{
ShowMsg("CLSIDFromProgID g_szAdocRsdId Failed");
goto Exit;
}
//创建结果集对象
hr = CoCreateInstance(tclsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, iid_recordset, (LPVOID*)&m_adoRs);
if (FAILED(hr) || !m_adoRs)
{
ShowMsg("CoCreateInstance m_adoRs Failed");
goto Exit;
}
//建立连接
hr = m_adoCon->Open(_T("Database=\\NandFlash\\111.sdf;Password=111;"), _T(""), _T(""), adOpenUnspecified);
if (FAILED(hr))
{
ShowMsg("Open Failed");
goto Exit;
}
//绑定连接到记录集
VARIANT vcon1;
VariantInit(&vcon1);
vcon1.pdispVal = m_adoCon;
vcon1.vt = VT_DISPATCH;
hr = m_adoRs->put_ActiveConnection(vcon1);
if (FAILED(hr))
{
ShowMsg("put_ActiveConnection Failed");
goto Exit;
}
ShowMsg("Create Connection OK!"); //程序能够执行到这里
//查询结果
VARIANT vstrsql, vempty;
VariantInit(&vstrsql);
VariantInit(&vempty);
vstrsql.bstrVal = SysAllocString(strsql);
vstrsql.vt = VT_BSTR;
hr = m_adoRs->Open(vstrsql, vempty, adOpenDynamic, adLockOptimistic, /*adCmdText*/adCmdTableDirect);
SysFreeString(vstrsql.bstrVal);
if (FAILED(hr))
{
ShowMsg("exec Failed");
goto Exit;
}
ShowMsg("exec OK");
LONG ircount = 0;
m_adoRs->get_RecordCount(&ircount);
cs.Format(L"get %d rows", ircount);
ShowMsg(cs);
VARIANT vdata,vsel;
VARIANT_BOOL iEOF = FALSE;
m_adoRs->MoveFirst();
hr = m_adoRs->get_EOF(&iEOF);
while(!iEOF)
{
//得到表中字段集对象
hr = m_adoRs->get_Fields(&m_adoFields);
vsel.uiVal = 0;
vsel.vt = VT_UI2;
hr = m_adoFields->get_Item(vsel, &m_adoField);
hr = m_adoField->get_Value(&vdata);
//得到字段对象
vsel.uiVal = 1;
vsel.vt = VT_UI4;
hr = m_adoFields->get_Item(vsel, &m_adoField);
hr = m_adoField->get_Value(&vdata);
m_adoRs->MoveNext();
m_adoRs->get_EOF(&iEOF);
}
m_adoRs->Close();
Exit:
DEL_HR(m_adoRs);
DEL_HR(m_adoCon);
DEL_HR(m_adoField);
DEL_HR(m_adoFields);