MFC 数据库编程

来源:互联网 发布:linux tmp系统清理 编辑:程序博客网 时间:2024/05/15 05:07

使用ADO进行数据库编程

ADO对象:Connection对象:用来建立和维护与数据库的连接。在打开之前,用连接信息配置该对象,包括数据库位置,用户ID以及密码。一旦所有这些信息都正确地匹配了,Connection对象将立即调用其Open方法,以打开连接。可以调用Connection对象的Close对象来关闭数据库的连接。

Command对象:在数据库中执行命令,可以使用这个语句来运行SQL语句或调用存储过程。无论何时需要命令返回数据行,都必须将Command对象与Recordset对象相关联,以返回存储在记录集中的数据,

Recordset:包含数据库的一个记录集,该记录集是一条命令被送入数据库之后所返回的一组记录,可以像在其他数据库访问技术一样,在Recordset对象中定位,也可以通过和Recordset相关联的Field对象,访问Recordset的每一条记录中的字段,可以更新Recordset的记录,然后使用Recordset来更新数据库。此外还可以给Recordset插入新记录,或删除记录,然后使用Recordset来更新数据库。

Error:当数据库发生错误时,来自数据库的错误信息就被放入ADO Error对象。Error对象中的错误信息是数据库的错误信息,而非ADO的错误信息。当遇到一个错误并需要查看错误信息以判定哪出错时,需要检验数据库错误代码以说明,而不是ADO的错误代码。

Parameter对象:用来传递变量和调用存储的过程或参数化的查询.这些功能都将与Command对象相关联,用来调用已经编入Command对象的命令。当调用存储过程时,通常需要给该过程传递参数,为了传递参数,必须把这一系列的Parameter对象与Command对象相关联。每个Parameter对象都有一个参数名,用来保存参数的值,此值应该被传递给数据库的特定参数。

Field:表示Recordset中的一个列。每个Field对象都包含列名,数据值以及数据值的表示方式。由于ADO是设计用于微软的脚本语言,而脚本语言中唯一可以用的数据类型是Variant数据类型,Field字段始终包含一个Variant数据值。当更新到数据库时,数据值被自动转换为正确的数据类型。(使用ADO对象时必须把数据值从Variant数据类型转换为所需要的类型,而更新数据值时则又换回Variant数据类型。)

通常情况下,要使用ADO访问数据库的时候,要经过以后几个步骤:(1)导入ADO  DLL(2)初始化COM环境(3)创建连接对象,与数据库建立连接(4)执行命令并返回记录集


#import "C:\program files\common files\system\ado\msado15.dll"  no_namespace,rename("EOF","adoEOF")//写入stdafx.h文件中


::CoInitialize(NULL);//初始化COM环境
    _ConnectionPtr con;
    con->ConnectionTimeout = 5;//设置连接延时
    _RecordsetPtr rst(__uuidof(Recordset));
    HRESULT hr;
    _bstr_t StrStatement="123456";
    _bstr_t StrUser="sa";
    _bstr_t Str_Psw;
    _variant_t ID;
    _variant_t SID;
    hr = con.CreateInstance(__uuidof(Connection));
    StrStatement = "Provider=SQLOLEDB.1;Server=127.0.0.1;Database=DBMonitorV1.0_xinjiang;uid=sa;pwd=123456";
    if(SUCCEEDED(hr))
    {
        hr = con->Open(StrStatement,StrUser,Str_Psw,adModeUnknown);//数据库连接
        if(FAILED(hr)) //if(((HRESULT)(hr)) < 0)                //判断连接是否成功
        {
            throw _T("Can't linked sql");//代表打开数据库失败
        }
        else
        {
            rst = con->Execute(_bstr_t("select * from Alarms"),NULL,-1);//执行SQL语句
            while(!rst->adoEOF)
            {
                ID = rst->GetCollect("alarmid");//获取alarmid项的值
                SID = rst->GetCollect("strategyId");
                rst->MoveNext();
            }
        }
    }
    rst->Close();
    rst->Open(_variant_t("select * from Alarms"),_variant_t((IDispatch *)con), adOpenDynamic,adLockOptimistic,-1);//AddNew之前要先Open
    
    rst->AddNew();
    rst->PutCollect("alarmType",_variant_t("100"));//往结果集里面写数据
    rst->Update();//更新数据库

    rst->Delete(adAffectCurrent);//删除当前项

    rst->Close();
    if(con->State)
    {
        con->Close();
    }
    con = NULL;

0 0
原创粉丝点击