c++对mssql进行操作(ado)

Ado是以com的形式来进行提供,所以他的许多行为都必须支持com的规范,在进行Ado操作之前必须将ado的com对象引入到项目当中。

引入

#import "C:\Program Files\CommonFiles\System\ADO\msado15.dll" \

no_namespace rename("EOF","EndOfFile")

但要注意不能放在stdAfx.h文件的开头,而应该放在所有include指令的后面。否则在编译时会出错。

程序在编译过程中,VC++会读出msado15.dll中的类型库信息,自动产生两个该类型库的头文件和实现文件msado15.tlh和msado15.tli(在您的Debug或Release目录下)。在这两个文件里定义了ADO的所有对象和方法,以及一些枚举型的常量等。我们的程序只要直接调用这些方法就行了,与使用MFC中的COleDispatchDriver类调用Automation对象十分类似。

在引入之后对com对象进行初始化CoInitialize(NULL)

ado的三个关键对象

         在c++有关数据库的操作之中有三个非常养分的对象,分别有连接对象(_Connection)、命令对象(_Command)和记录集对象(_RecordSet),这三个对象封装了数据库核心的操作。

_Connection:负责对数据库进行连接和管理。

_Connection对象的创建

_ConnectionPtr  sqlSp; //创建一个_ConnectionPtr用来做对数据库的操作

//创建对象的实例,并且将结果反馈给HRESULT对象

         HRESULThr=sqlSp.CreateInstance(_uuidof(Connection));

         /*

         if(FAILED(hr))

         {

                   cout<<"_ConnectionPtr对象指针实例化失败!!!"<<endl;

                   return;

         }

         */

         if(hr!=S_OK)//判断 sqlSp的对象实例化是否成功

         {

                   cout<<"_ConnectionPtr对象指针实例化失败!!!"<<endl;

                   return;

         }

定义连接字符串

_bstr_t strConnect="Driver={sqlserver};server=127.0.0.1,1433;uid=sa;pwd=sa;database=zy;";

   上面定义了一个sql的连接字符串,其实server表示目标计算机的地址或者服务名,1433表示目标计算机的端口,uid表示sqlserver的用户名,pwd表示sqlserver的密码,database表示要操作的数据库名称

打开数据库的链接

sqlSp->Open(strConnect,"","",adModeUnknown);

adModeUnknown表示的是数据库连接的模式,通常来用设置其权限。adModeUnknown是默认的选项,表示当前的模式未确认,更多的细节可以参考msdn上的介绍http://msdn.microsoft.com/en-us/library/windows/desktop/ms675792(v=vs.85).aspx

_RecordsetPtr:记录集对象指针,用来执行SQL语句并记录查询结果。可以理解成,用户通过select查询语句查询数据里,将查询到的结果保存到该对象里面,然后对其进行遍历操作。

_RecordsetPtr m_pRecordset;//定义_ RecordsetPtr对象

 

//以下语句是对m_pRecordset对象进行实例化,并且操作是否成功

if(FAILED(m_pRecordset.CreateInstance(_uuidof( Recordset ))))

                   {

                            cout<<"记录集对象指针实例化失败!"<<endl;

                            return;

                   }

//通过调用open来打开数据库进行查询数据,以下红色代表的查询的语句。

m_pRecordset->Open("SELECT *FROM  zyprocStatus",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic,adCmdText);//打开数据库,执行SQL语句

 

//当用户已经查询完毕以后,可以通过以下方式来遍历数据库

         m_pRecordset->MoveFirst();//定位到该数据集的第一行数据

                            while(!m_pRecordset->adoEOF)//判断是否遍历完成

         {

         //通过调用 m_pRecordset->Fields->GetItem(_variant_t("列名"))->Value  可以获得当前行的特定列数据                                

         m_pRecordset->Fields->GetItem(_variant_t("tpReady"))->Value=_bstr_t("33");//将结果更改为33

                  m_pRecordset->Update();//更新当前的操作结果

                                    

                                     stringbookname=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("tpReady"))->Value);

                                     cout<<bookname<<endl;

                                     m_pRecordset->MoveNext();//读取下一行数据

 

                            }

自定义SQL语句,用户可以调用_ConnectionPtr对象的Execute方法来自定义执行语句

_bstr_t bstrSQL;

                            bstrSQL="deletezyprocStatus where tpReady=22 ";

                            sqlSp->Execute(bstrSQL,NULL,adCmdText);


 

 

 

 

#include <icrsint.h>

#include<iostream>

#include<iomanip>

#include <string>

using namespace std;

#import "c:\programfiles\common files\system\ado\msado15.dll"  no_namespace rename("EOF","adoEOF")

void main()

{

    CoInitialize(NULL);

    _ConnectionPtr  sqlSp;

    HRESULThr=sqlSp.CreateInstance(_uuidof(Connection));

    /*

    if(FAILED(hr))

    {

        cout<<"_ConnectionPtr对象指针实例化失败!!!"<<endl;

        return ;

    }

    */

    if(hr!=S_OK)

    {

        cout<<"_ConnectionPtr对象指针实例化失败!!!"<<endl;

        return ;

    }

    else {

        try {

           

            _bstr_t strConnect="Driver={sqlserver};server=127.0.0.1,1433;uid=sa;pwd=sa;database=zy;";

            //_bstr_tstrConnect="Provider=SQLOLEDB;Server=127.0.0.1,1433;Database=PBMS;uid=sa;pwd=pp471006459;";

            //_bstr_tstrConnect="Provider=SQLOLEDB.1;Password=pp471006459;Persist SecurityInfo=True;User ID=sa;"

                //"InitialCatalog=PBMS;Data Source=127.0.0.1,1433";

            //以上这三条strConnect语句都可以用!!看自己喜好选择用吧

            //要注意修改用户名uid、密码pwd、数据库名database,这三个参数均是你自己sql server的数据库信息

            sqlSp->Open(strConnect,"","",adModeUnknown);

        }

        catch(_com_error&e) {

            cout<<e.Description()<<endl;

        }

        _RecordsetPtr m_pRecordset; //记录集对象指针,用来执行SQL语句并记录查询结果

        if(FAILED(m_pRecordset.CreateInstance(_uuidof( Recordset ))))

        {

            cout<<"记录集对象指针实例化失败!"<<endl;

            return;

        }

        //charstrSQL[]="SELECT * FROM Books";

        try {

            m_pRecordset->Open("SELECT * FROM zyprocStatus",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic,adCmdText);//打开数据库,执行SQL语句

           

        }

        catch(_com_error &e)

        {

            cout <<e.Description()<<endl;

        }

 

        try {

            m_pRecordset->MoveFirst();

            while(!m_pRecordset->adoEOF)

            {

                //m_pRecordset->Fields->GetItem(_variant_t("tpReady"))->Value=_bstr_t("33");

                m_pRecordset->Update();

               

                string bookname=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("tpReady"))->Value);

                cout<<bookname<<endl;

                m_pRecordset->MoveNext();

 

            }

           

        }

        catch(_com_error &e)

        {

            cout <<e.Description()<<endl;

        }

    }

    _bstr_t bstrSQL;

            bstrSQL="deletezyprocStatus where tpReady=22 ";

            sqlSp->Execute(bstrSQL,NULL,adCmdText);

    system("pause");

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值