2016060101

一、ADO数据模型

1.ADO全称:

  ActiveX Data Objects

2.ADO是面向对象的。是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,它是一种功能强大的数据访问编程模式,是对OLE DB的封装

二、ADO编程步骤:

1.在stdAfx.h文件中,导入使用的dll文件

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库

PS:1.上面的导入语句必须是同一行;

  2.rename("EOF","adoEOF")指在导入dll的同时,将ADO以EOF结尾的修改为adoEOF,以避免与系统头文件定义的EOF重合;rename此属性用于类型库中的一个名称和系统头文件中的宏定义重合时。

2.初始化OLE(Object Linking and Embedding,对象连接与嵌入)/COM(组建对象模型)的库

//初始化

if(!AfxOleInit())

{

AfxMessageBox("OLE初始化错!");

return FALSE;

}

PS:OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:

(1)Clipboard;

(2)Drag   and   drop;

(3)Object   linking   and   embedding(现在的OLE,已不再仅仅是Object   linking   and   embedding的概念);

(4)In-place   activation;

与AfxOleInit()对应的是,AfxOleTerm()。   CoInitialize和CoUninitialize必须成对使用,后者不必。

AfxOleInit()和AfxOleTerm()其实也是需要成对的,但是,在你的程序中,AfxOleTerm()可以不出现,这是因为,MFC已经帮你做好了

3.创建一个数据连接

_ConnectionPtr  m_pConn;

m_pConn.CreateInstance("ADODB.Connection")

PS:通常使用_ConnectionPtr 来创建一个数据连接或执行一条不返回任何结果的SQL语句 

  adCmdText : CommandText是文本命令
  adCmdTable : CommandText是一个表名

  adCmdProc : CommandText是一个存储过程

  adCmdUnknown : 未知

eg:

pConn->Execute("CREATE TABLE

users  (ID INTEGER, username TEXT, old INTEGER, birthday DATETIME)",

&RecordsAffected ,  adCmdText);

4.打开数据库连接:   Open (connectionstring , userID , password , options)

m_pConn->Open( "Provider=Microsoft.Jet.OLEDB.4.0; Data   Source= C:\\test.mdb", “”,“", adModeUnknown);

  connectionstring : 一个包含有关连接的信息的字符串值。

  userID  :  一个字符串值,建立连接时要使用的用户名称。

  password  : 一个字符串值,建立连接时要使用的密码。

   options  :  可选值,用于指定对数据的更新许可权

  adModeUnknown:表示为默认权限值,包括常规的读写及修改等

Ps:当连接打开时,可以对数据源(即要操作的数据库)执行命令

  ==>数据库连接方法总结

==>完整样例代码:

//初始化

if(!AfxOleInit())

{

  AfxMessageBox("OLE初始化出错!");

  return FALSE;

}

_ConnectionPtr pConn;

if (FAILED(pConn.CreateInstance("ADODB.Connection")))

{

  AfxMessageBox("Create Instance failed!");

   return FALSE;

}

else

{

  pConn ->Open( "Provider=Microsoft.Jet.OLEDB.4.0;               Data Source= C:\\test.mdb", “”,“", adModeUnknown);

}

//执行SQL命令:CREATE TABLE创建表格users,users包含四个字段:整形ID,字符串username,整形old,日期型birthday

pConn->Execute("CREATE
TABLE

users 
(ID INTEGER, username TEXT, old INTEGER, birthday DATETIME)",

&RecordsAffected
,  adCmdText);

三、_CommandPtr接口和_RecordsetPtr(对象记录指针)

1._CommandPtr接口

1.1_CommandPtr接口与_ConnectionPtr的联系

_CommandPtr接口返回一个记录集。

它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。

在使用_CommandPtr接口时,你可 以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。

如果你只执行一次或几次数据访问操作,前者是比较好 的选择。

但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用 _CommandPtr接口执行存储过程和SQL语句。

1.2 _CommandPtr的使用步骤:

1.2.1   第一步

•定义一个 对象命令指针

_CommandPtr    m_pCommand;

•创建一个实例
m_pCommand.CreateInstance(

"ADODB.Command“

);

1.2.2 第二步

•激活连接

m_pCommand->ActiveConnection

=  pConn;

1.2.3第三步:

•输入命令字符串

m_pCommand->CommandText  =

"SELECT * FROM users

1.2.4第四步:

•执行命令

_RecordsetPtr m_pRecordset = m_pCommand->Execute(

&vNULL,&vNULL,adCmdText

);

2._RecordsetPtr(对象记录指针)

2.1将执行结果存入记录集指针中

_RecordsetPtr   m_pRecordset;

m_pRecordset.CreateInstance("ADODB.Command“);

m_pRecordset  = pConn->Execute(“Select * from users ", &RecordsAffected, adCmdText);

2.2添加记录

_RecordsetPtr   m_pRecordset;

m_pRecordset.CreateInstance("ADODB.Command“);

  m_pRecordset->AddNew();

  m_pRecordset->PutCollect(_variant_t("姓名"),  _variant_t(m_strName));

  m_pRecordset->PutCollect(_variant_t(“工作单位 "),   _variant_t(m_strComName));

  m_pRecordset->PutCollect(_variant_t(“单位地址  "),   _variant_t(m_strComAddr));

  //更新数据库-将新纪录存入数据库

  m_pRecordset->Update();

}

2.3记录字段赋值

m_pRentRecordset->PutCollect(“ID”,_variant_t((long)21));

m_pRentRecordset->PutCollect(long(0),_variant_t((long)21));

•Index可以是字符串表示字段名,也可以是整型,表示字段对应的序号。

•pvar表示要写入的变量值。

3.关闭记录集及数据库

3.1关闭记录集

  m_pRecordset-> close();

3.2关闭数据库连接

  m_pConnection->close();

4.使用事务

4.1BeginTrans

初始化一个事务;其后必须有CommitTrans和/或RollbackTrans相呼应

4.2CommitTrans

提交一个事务,以完成对数据源的永久改变(要求使用之前必须调用了BeginTrans方法)

4.3RollbackTrans

取消一个事务,恢复对数据源做的临时性改变(要求使用之前必须调用了BeginTrans方法)

4.4代码实现

m_pConnection->BeginTrans();

for(i =1; i<=5; i++)
{
  str.Format(“%d”, i);
  m_pRecordset->AddNew();

  m_pRecordset->PutCollect(“姓名”,
 _variant_t(“小明”)));

m_pRecordset->Update();
}

if (State == true)//--某种情况满足时,修改数据库数据

{

m_pConnection->CommitTrans();

}

else//--否则,取消数据修改

{

m_pConnection->RollbackTrans();

}

时间: 2024-10-14 19:46:41

2016060101的相关文章

MariaDB10.2.X-新特性2-支持check约束and with as

前几天写了一篇MariaDB10.2支持分析函数,大家印象中MySQL不支持with as ,check约束,那么MariaDB10.2也同样给你惊喜 1.with as MariaDB [test11]> with a as ( select * from t1 where channerId ='支付宝' )  select * from a; +----+--------+------------+-----------+--------+ | id | userId | orderId 

MariaDB10.2.X支持分析函数

前言:前段时间看到MariaDB10.2出测试版本了,心想有什么新特性玩玩,大家都知道MySQL不支持分析函数,但是MariaDB10.2.X支持分析函数了, 1.表结构 CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userId` varchar(30) NOT NULL COMMENT '用户ID', `orderId` varchar(60) NOT NULL DEFAULT '' COMMENT '订单ID', `c