我新建了一个ATL工程,类型是DLL,没有使用MFC。然后向其中添加ATL Object-》Data Access-》consumer,选择Microsoft.Jet.OLEDB.4.0和一个Access表,测试连接成功,但是当程序一运行打开数据源时就失败,代码如下:
HRESULT hr;
CDBPropSet dbinit(DBPROPSET_DBINIT); //If have been opened
if (m_bDataSourceOpen)
return TRUE; //Setting
dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINFO, true);
dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);
dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);
dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR(""));
dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR(""));//换成Admin也不行
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("c:\\dbtest.mdb"));
dbinit.AddProperty(DBPROP_INIT_MODE, (long)3);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING, OLESTR(""));
dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
hr = m_DataSource.Open(_T("Microsoft.Jet.OLEDB.4.0"), &dbinit);
if (FAILED(hr))//运行到这就错
{
GetLastErrorDesc(m_szLastErrorDesc);
return FALSE;
}我在exe的程序中,不用上面的代码而只用下面的就可以:
HRESULT hr;
hr = m_DataSource.Open(_T("Microsoft.Jet.OLEDB.4.0"), _T("c:\\Dbtest.mdb"));//打开数据源
if (FAILED(hr))
{
GetLastError(m_szLastErrorDesc);
}
问题是我现在必须要使用动态库做,如何解决这个问题呢?请各位大侠帮帮忙!