我有两个简短的问题,涉及在C ++项目中导入和使用ADO。我对任何形式的ADO都没有经验。
首先,目前我的程序的数据库方面只需要在Windows上运行。是否足以测试在运行ADO特定代码之前是否定义了_WIN32或_WIN64,还是有更好的方法?我使用Visual C ++ 2010 Express作为我的编译器。
其次,我关注this page作为我的向导。我已经为msado15.dll包含了#import语句。 #import指令用红色加下划线,当我将鼠标悬停在它上面时收到错误“...无法打开源文件路径/ to / msado15.tlh”,并且我复制到源代码中的任何ADO内容都保持红色下划线。我已经检查了错误消息中列出的目录,msado15.tlh就在那里,如果这很重要的话。此外,该程序编译(它执行后崩溃,但这是我将单独诊断的其他东西)。
我对这为什么会发生这种情况一无所知。任何帮助或建议将不胜感激。
答案 0 :(得分:10)
我们这样做,我们将以下内容添加到VC ++目录/包含文件
$(ProgramFiles)\Common Files\System\ado
然后我们像这样导入
标题中的:
#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") no_implementation
位于cpp文件的顶部
#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") implementation_only
略有不同,因为我们更喜欢保留命名空间,并使用不同的EOF重命名。
答案 1 :(得分:2)
当我开始使用ADO时,我遇到了同样的问题。 (红色下划线,找不到......) 它驱使我疯了,但在简单编译后,下划线消失了,一切正常。
我用
#import "C:\Program\Delade filer\System\ado\msado15.dll" rename_namespace("USEADO"),rename("EOF","EndOfFile")
在我的标题中。
在cpp中:
#include "stdafx.h"
int SQLsetInfo(THING *Thing, GADGET *Gadget)
{
HRESULT hr;
USEADO::_ConnectionPtr connection;
USEADO::_RecordsetPtr recordset;
//Initialize COM
if(FAILED(hr = CoInitialize(NULL)))
{ MessageBox( NULL, L"Initialize COM Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK);
//Do something, eg shut down DB stuff and continue without or exit program
//Insert error handeler below
return hr;//TODO Ad error handeling see line 149
}
if(FAILED(hr = connection.CreateInstance(__uuidof(USEADO::Connection))))
{ MessageBox( NULL, L"Create connection instance Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK);
//Do something, eg shut down DB stuff and continue without or exit program
return hr;
}
if(FAILED(hr = recordset.CreateInstance(__uuidof(USEADO::Recordset))))
{ MessageBox( NULL, L"Create recordset instance Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK);
//Do something, eg shut down DB stuff and continue without or exit program
return hr;
}
connection->CursorLocation = USEADO::adUseServer; //http://dev.mysql.com/tech-resources/articles/vb-cursors-and-locks.html
//Try to connect to SQL server
try { connection->Open(L"YOUR CONNECTION STRING", USEADO::adConnectUnspecified); }
catch(...) {std::cout << "!!! connection->Open(ConnectionString FAILED !!!" << std::endl; }
我不是C ++的专家,但这对我来说很好。希望它能帮到你。如果其他人对上述片段有任何建议/评论,我很期待....