如下,是访问SQL server2000数据库
class CMy
{
public:
CMy()
{
//memset( (void*)this, 0, sizeof(*this) );
ClearFields();
}; inline void ClearFields()
{
memset( (void*)this, 0, sizeof(*this) );
};
int m___ID;
char m_column0[21];
char m_column1[21];BEGIN_COLUMN_MAP(CMy)
COLUMN_ENTRY_TYPE(1, DBTYPE_I4, m___ID)
COLUMN_ENTRY_TYPE(2, DBTYPE_STR, m_column0)
COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_column1)
END_COLUMN_MAP()
};class COLEDBDemoSet : public CCommand<CAccessor<CMy> >
{
public:
HRESULT Open()
{
CDataSource db;
CSession session;
HRESULT hr; CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_INTEGRATED, "SSPI");
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
dbinit.AddProperty(DBPROP_INIT_CATALOG,  "Employees");
dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); hr = db.OpenWithServiceComponents("SQLOLEDB.1", &dbinit);
if (FAILED(hr))
return hr;
hr = session.Open(db);
if (FAILED(hr))
return hr;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
propset.AddProperty(DBPROP_IRowsetScroll, true);
propset.AddProperty(DBPROP_IRowsetChange, VARIANT_TRUE);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE ); hr = CCommand<CAccessor<CMy> >::Open(session, "SELECT * FROM dbo.部门", &propset);
if (FAILED(hr))
return hr;
return MoveNext();//这里不太明白,为什么返回next,那第一条记录不会被跳过吗。。请解答,本人初学
}
};
................................
//增加一条记录
void COLEDBDemoView::onAddNewRecord() 
{
SaveRecord();
AddRecord();
}void COLEDBDemoView::AddRecord()
{
m_bAddingRecord = TRUE;
m_pSet->ClearFields();
UpdateData(FALSE);
}
//保存记录
BOOL COLEDBDemoView::SaveRecord()
{
if(!UpdateData(TRUE))
return FALSE;
if(m_bAddingRecord)
{
m_bAddingRecord = FALSE;
if(FAILED(m_pSet->Insert()))//每次增加都没成功,进入下面提示Insert failed,不知原因
{
AfxMessageBox("Insert failed", MB_ICONEXCLAMATION);
m_pSet->MoveFirst();
UpdateData(FALSE);
return FALSE;
}
}
else if(FAILED(m_pSet->SetData(0)))//这里也不明白,每次都进入下面提示"Update via SetData failed"
{
AfxMessageBox("Update via SetData failed", MB_ICONEXCLAMATION);
UpdateData(FALSE);
return FALSE;
}
return TRUE;
}
先谢了!!!!!!!!!!!!!