两种都是使用ADOX的Catalog,只是在引入的时候有点区别,使用了名字空间: 1 需要同时用 ADO 和 ADOX,引入方法: #import "C:\program files\common files\system\ado\msado15.dll" rename("EOF","adoEOF") #import "C:\Program Files\Common Files\system\ado\msadox.dll" 因为两个库的namespace 是不同的,第一个是ADODB,第二个是ADOX,注意上面第一行通常加的no_namespace去掉了! 在使用ADO所属的名字空间里的变量,函数时,在前面加上ADODB:: 在使用ADOX所属的名字空间里的变量,函数时,在前面加上ADOX:: HRESULT hr = S_OK; hr = ::CoInitialize(NULL); if(SUCCEEDED(hr)) { HRESULT hr = S_OK; // Define ADOX object pointers. // Initialize pointers on define. // These are in the ADOX:: namespace. ADOX::_CatalogPtr m_pCatalog = NULL; //Set ActiveConnection of Catalog to this string _bstr_t strcnn("Provider=Microsoft.JET.OLEDB.4.0;Data source=c:\\new.mdb"); try { m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog)); m_pCatalog->Create(strcnn); } catch(_com_error &e) { // Notify the user of errors if any. AfxMessageBox(e.ErrorMessage()); } } 参考: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/admthcreatexvc.asp 2 这种方式的引入有些区别 先是在头文件.h添加: #import "c:\Program Files\Common Files\system\ado\msadox.dll" rename_namespace("ADOX") #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ rename_namespace("ADO") rename("EOF", "EndOfFile") #pragma warning (disable: 4146)using namespace ADO; 然后在实现文件.cpp里: using namespace ADOX; _CatalogPtr m_pCatalog; m_pCatalog.CreateInstance(__uuidof(Catalog)); try { //m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog)); m_pCatalog->Create(strcnn); } catch(_com_error &e) { // Notify the user of errors if any. AfxMessageBox(e.ErrorMessage()); return FALSE; } using namespace ADO;//如果之后的代码用的是ado的话要加这一句 个人感觉第二种用起来方便些。
|