C ++导入和使用ADO

时间:2011-07-01 19:04:18

标签: c++ ado

我有两个简短的问题,涉及在C ++项目中导入和使用ADO。我对任何形式的ADO都没有经验。

首先,目前我的程序的数据库方面只需要在Windows上运行。是否足以测试在运行ADO特定代码之前是否定义了_WIN32或_WIN64,还是有更好的方法?我使用Visual C ++ 2010 Express作为我的编译器。

其次,我关注this page作为我的向导。我已经为msado15.dll包含了#import语句。 #import指令用红色加下划线,当我将鼠标悬停在它上面时收到错误“...无法打开源文件路径/ to / msado15.tlh”,并且我复制到源代码中的任何ADO内容都保持红色下划线。我已经检查了错误消息中列出的目录,msado15.tlh就在那里,如果这很重要的话。此外,该程序编译(它执行后崩溃,但这是我将单独诊断的其他东西)。

我对这为什么会发生这种情况一无所知。任何帮助或建议将不胜感激。

2 个答案:

答案 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重命名。

C++ Import help on MSDN

C++ Import Attributes on MSDN

答案 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 ++的专家,但这对我来说很好。希望它能帮到你。如果其他人对上述片段有任何建议/评论,我很期待....