如何使用由ATL OLE DB向导生成的类? [英] How work with class that generated by ATL OLE DB wizard?

查看:127
本文介绍了如何使用由ATL OLE DB向导生成的类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好.我使用OLE DB向导创建类.如何使用该类,例如,意味着如何从db获取所有数据?

Hi.I used OLE DB wizard for creating class.How use this class, I mean for example how get all datas from db?

推荐答案

注释表的结构

I have a Notes table with the structure

CREATE TABLE Notes (
ProviderNo CHAR(9), 
Note CHAR(29))



该向导创建了一个Accessor类,并可能创建了一个从该Accessor类派生的附加类.所以你应该有这样的东西.



The wizard has created an Accessor class and probably an additional class that is derived from the accessor class. So you should have something like this.

class CDBNotesAccessor
{
public:
  
  CDBNotesAccessor()
  {
    ClearData();
  };

  void ClearData()
  {
    memset( (void*)this, 0, sizeof(*this) );
  };

  TCHAR m_szProviderNo[10];
  TCHAR m_szNote[30];

BEGIN_COLUMN_MAP(CDBNotesAccessor)
  COLUMN_ENTRY(1, m_szProviderNo)
  COLUMN_ENTRY(2, m_szNote)
END_COLUMN_MAP()

DEFINE_COMMAND(CDBNotesAccessor, _T("SELECT ProviderNo, Note FROM Notes"))

};
class CDBNotes: public CCommand<caccessor><cdbnotesaccessor> > 
{
public:
  CDBNotes(void);
  virtual ~CDBNotes(void);
  HRESULT OpenNotes(CDBSession& session)
  {
    CDBPropSet propset(DBPROPSET_ROWSET);
    propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
    propset.AddProperty(DBPROP_IRowsetScroll, true);
    propset.AddProperty(DBPROP_IRowsetChange, true);
    propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE );

    hr = CCommand<caccessor><cdbnotesaccessor> >::Open(session, NULL, &propset);
    return hr;
  }
};
</cdbnotesaccessor></caccessor></cdbnotesaccessor></caccessor>




1.您需要使用ATL:CSession对象连接到数据库.像这样的东西:




1. you need to connect to database using ATL:CSession object. Something like this:

ATL::CSession session;
ATL::CDataSource db;
ATL::CDBPropSet dbinit(DBPROPSET_DBINIT);
HRESULT hr;

dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);
dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);
dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "");
dbinit.AddProperty(DBPROP_AUTH_USERID, "Admin");
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "C:\\my_access_db.mdb");
dbinit.AddProperty(DBPROP_INIT_MODE, (long)16);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING, "");
dbinit.AddProperty(DBPROP_INIT_TIMEOUT, 60000); // specify connection timeout, if required

hr = db.OpenWithServiceComponents("Microsoft.Jet.OLEDB.4.0", &dbinit, 1);
if(FAILED(hr))
{
   // report error
}

hr = session.Open(db)
if(FAILED(hr))
{
   // report error
}



现在,您应该具有连接到C:\ my_access_db.mdb数据库的有效CSession对象.如果使用SQL Server,则初始化参数将有所不同(您将拥有SQL Server名称,用户名和密码).如果您需要有关此信息的更多信息,请告诉我.


2.现在,要使用CDBNotes类,请执行以下操作:



now, you should have a valid CSession object that is connected to the C:\my_access_db.mdb database. If you use SQL Server then the initialisation parameters will be a bit different (you would have SQL Server name, username and password). Let me know if you need more info on this one.


2. Now, to use the CDBNotes class do this:

CDBNotes notes;
hr = notes.Open(session); //session must be initialised and open
if(FAILED(hr))
{
    //report the error
}

while((hr = notes.MoveNext()))
{
  //scan through all the records in the Notes table
  cout << notes.m_szProviderNo << notes.m_szNote;

  // update some data
  _tcsupr(notes.m_szProviderNo);
  hr = notes.SetData()
  if(FAILED(hr))
  {
    //report the error
  }
}

//insert a new record
_tcscpy(notes.m_szProviderNo, _T("123"));
_tcscpy(notes.m_szNote,       _T("456"));
hr = notes.Insert();
if(FAILED(hr))
{
    //report the error
}

// cleanup
notes.Close();
session.Close();


这篇关于如何使用由ATL OLE DB向导生成的类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆