解决方案 »

  1.   

    补充一点我的 stdafx.h 文件是这样的
    // stdafx.h : 标准系统包含文件的包含文件,
    // 或是经常使用但不常更改的
    // 特定于项目的包含文件
    //#pragma once
    #define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
    #include <stdio.h>
    #include <tchar.h>
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespaces rename("EOF","adoEOF")// TODO: 在此处引用程序需要的其他头文件
      

  2.   

    建个MFC工程试试import 是否报错。
      

  3.   

    MFC工程也有同样的问题,我在stdafx.h 最后添加了 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespaces rename("EOF","adoEOF") 也有同样的编译错误
      

  4.   

    看看这篇文章的例子可不可以参考一下
    http://blog.csdn.net/xianglitian/article/details/5617173
      

  5.   

    似乎在MFC工程中引用ADO和在控制台应用程序工程中引用ADO有不同的方式,我新建了MFC工程,在stdafx.h最后添加了如下引用,可以编译通过#import "C:\Program Files\Common Files\System\ado\msado15.dll"named_guids rename_namespace("ADOCG") rename("EOF", "EndOfFile") rename("BOF","FirstOfFile")
    using namespace ADOCG;但是,添加如下代码则会编译错误,且与本帖错误完全一样#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespaces rename("EOF","adoEOF") rename("BOF","FirstOfFile")
    但是在控制台程序中采用两种方式添加引用,都会编译出错,但是错误不一样
      

  6.   

    还是自己Google解决了,参考了外国网站上关于VC++使用ADO的教程,可以参考以下网址
    http://www.developerfusion.com/article/4033/using-ado-in-c/以下是原文1) move
    #import "C:\Program files\Common Files\System\Ado\msado15.dll" \
    rename("EOF", "ADOEOF")
    to the stdafx.h file (note that I've added a '\' at the end of the first line.2) make sure #include "stdafx.h" appears before any #includes in your main file. 另外自己补充一下,也许是很多人没有注意到的,在使用ADO的三个指针以及ADO的其他变量时,必须要使用ADODB::的方式调用,如:ADODB::_ConnectionPtr pConn; 否则会编译出错
      

  7.   

    楼主说的好像不对呀。我没用ADODB去调用呀。你把导入改成一楼说的应该就对了。
      

  8.   


    似乎no_namespaces是多余的,添加了这段就会编译出错
      

  9.   

    今天用COM组件, 虽然不是ADO但也出现了同样的问题, LZ11楼是正解, 去掉no_namespace就可以编译通过了.
    但是需要添加相应的名称空间, 
    但是相同的代码在其他的机器上编译, 怎么编怎么过!...
    不懂!...
    不管如何, 碰到此类问题的朋友, 去掉no_namespace吧!
      

  10.   

    #import "C:\Program Files\Common Files\System\ado\msado15.dll"\
      no_namespace rename("EOF","adoEOF")
      

  11.   

    ADO操作SQL
    Visual C++提供了多种多样的数据库访问技术——ODBC API、MFC ODBC、DAO、OLE DB、ADO等。
    其中ADO技术是基于OLE DB的访问接口,它继承了OLE DB技术的优点,并且,ADO对OLE DB的接口作了封装,定义了ADO对象,使程序开发得到简化,ADO技术属于数据库访问的高层接口。
    1.导入相关库文件(一般在StdAfx.h中导入)         
    #import "c:\program files\common files\system\ado\msado15.dll" \
    no_namespace \
    rename("EOF","adoEOF")
    在#ifdef _UNICODE前面
    2.初始化COM库(一般在InitInstance()中初始化)
    BOOL CadoconnectionApp::InitInstance()
    {
    CWinApp::InitInstance();
    AfxOleInit();//初始化COM库
    AfxEnableControlContainer();
    }
    3 接口简介
    ADO库包含三个基本接口:
    __ConnectionPtr接口 创建数据库连接
    __CommandPtr接口 执行SQL命令
    __RecordsetPtr接口 返回结果集
     
    __ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。用__ConnectionPtr接口返回一个记录集不是一个好的使用方法。
     
    __CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用__CommandPtr接口时,可以利用全局__ConnectionPtr接口,也可以在__CommandPtr接口里直接使用连接串。如果只执行一次或几次数据访问操作,后者是比较好的选择。但如果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局__ConnectionPtr接口创建一个数据连接,然后使用__CommandPtr接口执行存储过程和SQL语句。
     
    __RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同__CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给__RecordsetPtr的connection成员变量,让它自己创建数据连接。如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局—ConnectionPtr接口,然后使用__RecordsetPtr执行存储过程和SQL语句。
    4.连接数据库
    在对话框
    public:
    _RecordsetPtr m_pRecordset;
    _ConnectionPtr m_pConnection;
    _CommandPtr m_pCommand;
    在类的构造函数中创建:
    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    m_pCommand.CreateInstance(__uuidof(Command));BOOL CADODlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog();
    // TODO: Add extra initialization here
    try
    {
    m_pConnection->ConnectionTimeout=10;
    m_pConnection ->Open("Provider=SQLOLEDB;Data Source= PC-20140312ZLBA;Initial Catalog=CNCDB","dbaccess","dbaccess",adModeUnknown);
    ///连接数据库
    MessageBox( L"连接数据库成功");
    }
    catch(_com_error e)
    {
    AfxMessageBox(_T("连接数据库失败!"));
    return TRUE;
    }
    return TRUE;  // return TRUE  unless you set the focus to a control
    }
    5.数据库操作
    m_pConnection ->Execute("delete from TBL_CONNECTLOGS",NULL,adCmdText);6.关闭连接
    void XXXX::OnDestroy()
    {
    if(m_pConnection ->State)
    {
    m_pConnection ->Close();
    }
    m_pConnection =NULL;
    }
    补充:连接字符串的模式
    一般模式
    "Provider=SQLOLEDB;Data Source=服务器;Initial Catalog=数据库;uid=SQL用户名;pwd=SQL密码;"信任模式
    "Provider=SQLOLEDB;Data Source=服务器;Initial Catalog=数据库;Integrated Security=SSPI;" 网络模式
    "Provider=SQLOLEDB;Data Source=IP地址,端口;Network Library=DBMSSOCN;Initial Catalog=数据库;UserID=用户名;Password=密码;" 注意看下面这两种写法,其实是一个意思:
    m_pConnect->Open("Provider=SQLOLEDB;Data Source=服务器;Initial Catalog=数据库;","sa","123456",-1);
    m_pConnect->Open("Provider=SQLOLEDB;Data Source=服务器;Initial Catalog=数据库;uid=sa;pwd=123456;","","",-1);
      

  12.   

    使用no_namespace并非多余,不用使用using namespace ADODB;
      

  13.   

    no_namespaces 改  no_namespace