打开数据库:
HRESULT hr;
CDataSource db;
CDBPropSet dbinit(DBPROPSET_DBINIT); dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR("sa"));
dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR("a"));
dbinit.AddProperty(DBPROP_INIT_CATALOG, LPSTR("master"));
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("LOCALHOST"));
// dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("PHOENIX\\XM"));
dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
hr = db.Open(_T("SQLOLEDB.1"), &dbinit);
if (FAILED(hr))
{
AfxMessageBox("连接数据库失败");
}
else
{
AfxMessageBox("连接数据库成功"); }
创建会话:
CSession m_session;
if(FAILED(m_session.Open(db)))
AfxMessageBox("创建会话失败");传入SQL语句,返回记录集:
CCommand<CManualAccessor> rs; CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY,
DBPROPVAL_UP_INSERT | DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE);
if (rs.Open(m_Session,ThisDlg.m_SQL , NULL, NULL,
DBGUID_DBSQL, FALSE) != S_OK)
{
AfxMessageBox(ThisDlg.m_SQL);
return ;
}
if (rs.m_spRowset == NULL)
{
return ;
}
ULONG ulColumns             = 0;
DBCOLUMNINFO* pColumnInfo   = NULL;
LPOLESTR pStrings           = NULL;
int i =0;
if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK)
{
return ;
}
m_nFields = ulColumns   ;
pBind = new MYBIND[m_nFields];
rs.CreateAccessor(m_nFields, &pBind[0], sizeof(pBind)*m_nFields);
for (ULONG l=0; l<m_nFields; l++)
rs.AddBindEntry(l+1, DBTYPE_VARIANT, sizeof(VARIANT)*256, &pBind[l].szValue,
NULL, &pBind[l].dwStatus);//DBTYPE_VARIANT
if(rs.Bind() != S_OK)
{
return ;
}
然后可以取pbind的值就可以得到返回的结果了