ADO技术范文

2024-07-24

ADO技术范文(精选10篇)

ADO技术 第1篇

关键词:Entity Framework,建模,实体类型

1 Entity Framework简介

ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。Entity Framework以Entity Data Model (EDM) 为主, 利用抽象化数据结构方式, 将数据库对象转换成应用程序对象, 库表字段转换为属性, 并系转换为关联系统, 把数据库的E/R模型转换成对象模型, 使开发人员通过对概念应用程序模型编程来创建数据访问应用程序, 以此降低面向数据的应用程序所需要的开发量, 并减轻系统维护工作。

2 Entity Framework建模

Entity Framework技术的应用中, 可针对数据库中各个表按照1:1映射生成模型和映射信息, 在代码中直接对表中数据进行增、删、改、查操作。但在实际应用中, 这种简单的处理方式不利于进一步降低程序开发工作量, 部分情况还违背了“程序开发以应用为中心的概念模型来工作”的理念, 对象的概念不清晰。为此, 对几种常用的数据库情景的建模方法进行介绍。

2.1 带有有效载荷的多对多关系建模

在带有有效栽花的多对多关系数据库中, 关系表除了主键外, 还有其他数据字段。在这种关系中, 直接把表映射到实体模型中, 两实体表自动创建对应的实体类型, 而关系表也被映射成为一实体类型, 在此实体类型中除了原有属性名, 还有对应两实体表的导航属性, 可分别通过1对多关系进行对象导航。

2.2 自引用关系建模

对于分类表之类的自引用表, 把表映射成为实体类型后, 其中将包含两个导航属性, 分别对应父、子对象, 其中父对象为1端, 多端为子对象集合, 因此分别把1端改名为父端名称如Parent Category, 多端改名为子对象集合名称如Sub Categories。由此两导航属性可方便地访问到对应对象。

2.3 跨表实体建模

在数据库设计过程中, 当一个实体的数据由于各种原因为分割在不同表中, 而程序开发需要把实体所有数据集合在一个实体类型中。对于这种跨表实体的情况, 建模时首先把所有的表都映射到实体模型中, 然后调整实体类型, 把主要表之外的其它表映射实体类中除主键对应属性外的所有属性复制到主要表映射实体类型中, 然后删除主要表映射实体类型中的所有导航属性和其它表实体类型, 在删除其它表实体类型时, 不删除映射存储模型中的表, 最后, 在剩下的这一个表映射实体类型中, 添加复制得到的所有属性的映射关系, 分别映射到对应的表中的列。在实体操作过程中, 映射关系能自动分别处理不同表中的对应数据。

2.4 多实体建模

在表中如果有部分字段内容较多并且不常使用, 为提高程序性能, 访问表时, 一般只访问表中的部分字段, 为此, 建模时必须把表分割成多个实体。首先把表映射成一般实体类型, 然后在设计器中创建新实体类型, 添加对应原表中主健的属性, 再把原映射实体类型中不需要的属性通过“剪切/粘贴”方法移动到新实体类型中, 并把新实体类型中的所有属性映射到原表对应字段, 然后在原实体类型中添加到新实体类型的1对1 (或1对0.1) 关联关系, 最后, 在添加以新实体类型为主体的到原实体类型的引用约束。通过实体类型访问数据时, 两实体类型对象分别访问其属性对应的字段数据。

2.5 多表派生建模

数据库建模完成后, 对于有些表存储另一表中额外信息的情况, 可以针对这些表建立派生的类体系结构。首先, 把所有表映射到实体模型中, 分别映射成一个实体类型, 然后删除实体类型之间的关联, 再为基类 (Business) 添加继承, 分别设置派生类为Retails和e Commerces, 再删除派生类中的Business Id属性, 则根据表的结构完成类的体系结构建模, 对Retails和e Commerces类型对象的操作会自动访问库表Retails、e Commerces及对应的Business表中对应记录。

2.6 表分割建模

对于常见的办公自动化系统数据库, 由于员工类型不同, 而薪水制度不同, 其中Employee Type值为1则为临时工, 薪水按小时计算, Wage字段记录其每小时薪水, Salary字段为无效数据, 如果Employee Type值为2则为正式员工, 薪水按月计算, Salary字段记录其每月薪水, Wage字段数据无效。为更好地实现在向应用编程, 分别建立临时工和正式员工两种类型, 但两种类型的数据都保存在Employees表中。建模过程首先把Employees表映射到实体模型中, 成为Employees类, 然后添加新实体Hourly Employee, 指定基类为Employees, 然后通过“剪切/粘贴”把Employees中的Wage属性移动到Hourly Employee中, 用同样的方法添加实体Full Time Employee类型;再在Hourly Employee实体中, 添加映射条件:“Employee Type=1”, 在Full Time Employee实体中添加映射条件:“Employee Type=2”, 然后设置Employees类型为抽象类, 并删除其中的Employee Type属性, 则Hourly Employee和Full Time Employee自动处理Employee Type字段的值, 并能自动根据记录创建对应类型的对象。

3 结论

POCO技术要求尽可能的应用简单的类, 以实现类型的独立性, 本文所讨论的Entity Framework建模方法则常常需要把表进行分割建模或组合建模, 在某些情况下将导致类的体系结构更为复杂, 但却使程序开发更为符合业务的现实情况, 能更充分地利用Entity Framework技术的各种技术优势。

参考文献

ADO编程总结(一) 第2篇

(一)1、在stdafx.h中添加代码:

#import “C:Program FilesCommon FilesSystemadomsado15.dll” no_namespace rename(“EOF”,“rsEOF”)

2、在APP.cpp的InitInstance中加入: ::CoInitialize(NULL);在ExitInstance()中加入:

::CoUninitialize();

3、工程目录下用记事本新建一文件,另存为扩展名为.udl的文件,如这里保存为mydata.udl,双击出现数据链接属性对话框,参考下图进行设置,确定。

4、定义以下变量:

_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;

5、初始化连接函数

BOOL CADOTestDlg::InitConnection(){ HRESULT hr;try

{

①hr=m_pConnection.CreateInstance(_uuidof(Connection));

if(SUCCEEDED(hr))

{

②m_pConnection->ConnectionString=“File Name=mydata.udl”;

m_pConnection->ConnectionTimeout=20;

hr=m_pConnection->Open(“",”“,”“,adConnectUnspecified);

if(FAILED(hr))

{

AfxMessageBox(_T(”打开连接失败“));

return FALSE;

}

}

else

{

AfxMessageBox(_T(”实例化连接失败“));

return FALSE;

}

return TRUE;} catch(_com_error e){

_bstr_t bstrSource(e.Source());

_bstr_t bstrDescription(e.Description());

AfxMessageBox(bstrSource+bstrDescription);

return FALSE;} } 对以上程序主要结果是一个try catch语句,其中 ①hr=m_pConnection.CreateInstance(_uuidof(Connection));实例化连接对象,固定格式 ②m_pConnection->ConnectionString=”File Name=mydata.udl“;设置连接串属性为UDL文件

m_pConnection->ConnectionTimeout=20;连接等待时间为20秒

hr=m_pConnection->Open(”“,”“,”“,adConnectUnspecified);使用Connection对象打开连接,其中adConnectUnspecified表示同步模式,若为adAsyncConnect表示异步模式。

该函数是比较固定,可以在以后的应用中复制经少量修改即可应用。

6、查询数据库表中的信息并输出:

void CADOTestDlg::OnBnClickedBtnShowAll(){ HRESULT hr;①_RecordsetPtr pShowAllRecordset;hr=pShowAllRecordset.CreateInstance(_uuidof(Recordset));if(FAILED(hr)){

AfxMessageBox(_T(”Create Instance of Recordset failed!“));return;} CString strSql;_variant_t var;CString strValue;int curItem=0;strSql=_T(”select * from emp“);try { ②hr=pShowAllRecordset->Open(_variant_t(strSql),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(SUCCEEDED(hr)){

③while(!pShowAllRecordset->rsEOF)

{

curItem=m_DataList.GetItemCount();

④var=pShowAllRecordset->GetCollect(_T(”EMPNO“));

if(var.vt!=VT_NULL)

strValue=(LPCSTR)_bstr_t(var);

m_DataList.InsertItem(curItem,strValue);

var=pShowAllRecordset->GetCollect(_T(”ename“));if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_DataList.SetItemText(curItem,1,strValue);var=pShowAllRecordset->GetCollect(_T(”hiredate“));if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_DataList.SetItemText(curItem,2,strValue);var=pShowAllRecordset->GetCollect(_T(”sal“));if(var.vt!=VT_NULL)strValue=(LPCSTR)_bstr_t(var);m_DataList.SetItemText(curItem,3,strValue);var=pShowAllRecordset->GetCollect(_T(”comm“));if(var.vt!=VT_NULL)

strValue=(LPCSTR)_bstr_t(var);

m_DataList.SetItemText(curItem,4,strValue);

⑤pShowAllRecordset->MoveNext();

}

} } catch(_com_error* e){

AfxMessageBox(e->ErrorMessage());

return;} ⑥pShowAllRecordset->Close();pShowAllRecordset=NULL;} 该函数也比较固定,通过设置命令文本字符串,对数据库进行操作,主要有以下几步 ①_RecordsetPtr pShowAllRecordset;hr=pShowAllRecordset.CreateInstance(_uuidof(Recordset));定义Recordset对象,并实例化,格式固定。②hr=pShowAllRecordset->Open(_variant_t(strSql),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);尝试打开记录,其中Open函数参数意义如下:

第1个参数:记录源,可以是下列内容之一:Command对象变量,SQL语句,存储过程,表名或完整的路径名,这里是命令文本,一般也是用命令文本。

第2个参数:指定在哪个连接中打开记录集。m_pConnection.GetInterfacePtr():Returns the encapsulated interface pointer,返回封闭接口指针,不懂。

第3、4个参数:详细说明见《Visual C++6.0 开发指南》714,715页,不懂。第5个参数:表示第1个参数的各类,这里是adCmdText,表示命令文本,其它取值见《Visual C++6.0 开发指南》715页。③while(!pShowAllRecordset->rsEOF)循环。

当记录未到末尾时,执行循环,这里有可能会报错:

: “rsEOF”: 不是“_Recordset”的成员

请确认在stdafx.h中添加了以下代码:rename(”EOF“,”rsEOF“)var=pShowAllRecordset->GetCollect(_T(”EMPNO“));

if(var.vt!=VT_NULL)

strValue=(LPCSTR)_bstr_t(var);

m_DataList.InsertItem(curItem,strValue);④var=pShowAllRecordset->GetCollect(_T(”EMPNO“));

if(var.vt!=VT_NULL)

strValue=(LPCSTR)_bstr_t(var);

m_DataList.InsertItem(curItem,strValue);比较固定的结构,从记录中读取列名为”EMPNO"的数据,保存到var结构中,再转换到CString对象。

数据类型的转换:

ADO.Net数据访问技术分析 第3篇

1. ODBC。

最初, 各个数据库软件开发商为自己的数据库设计不同的数据库管理系统 (DBMS) , 不同类型数据库之间的数据交换是一件非常麻烦的事情。为了解决这一问题, 微软提出了ODBC, 即开放式数据库连接技术 (Open Data Base Connectivity) , 它试图建立一种统一的应用程序数据库访问接口, 通过它开发人员无需了解数据库内部的结构就可以实现对数据库的访问。ODBC开创了数据访问技术的一个里程碑, 各数据库厂商纷纷推出为自己数据库系统设计的ODBC驱动程序。

2. OLE DB。

随着计算机技术的迅猛发展, ODBC在面对新的数据驱动程序的设计和构造方法时遇到了不少困难, OLE DB (Object Linkingand Embedding Data Base, 对象连接和嵌入数据库) 技术便应运而生了。从某种程度上来说, OLE DB是ODBC发展的一个产物。OLE DB在设计上采用了多层模型, 对数据的物理结构依赖更少, 理论上说, 任何一种能为OLE DB提供者所识别的语言都可以使用且不必严格基于SQL (Structured Query Language, 结构化查询语言) 的标准。

3. ADO。

ADO对OLE DB做了进一步的封装。从整体上来看, ADO模型以数据库为中心, 具有更多的层次模型和更丰富的编程接口, 它大致相当于OLE DB的自动化版本, 虽然在效率上稍有逊色, 但其追求的是简单、友好的应用。通过ADO, 不仅可以直接访问基于SQL Server的数据库, 还可以访问所有支持ODBC的数据库。

二、基于ADO.NET的数据访问技术

ADO.NET是ADO最新发展的产物, 具有更广泛的通用性。ADO.NET技术的出现, 开辟了数据访问技术的新纪元。ADO.NET是VS.NET的重要组成部分, 是新一代的数据存取技术。在ADO.NET中, 通过Managed Provider所提供的应用程序编程接口 (API) , 便可轻松地访问各种数据源的数据, 包括OLE DB和ODBC所支持的数据库。图1描述了有关数据访问与链接标准的各种数据模型的逻辑关系。

1. 关于Managed Provider和Data Set。

(1) Managed Provider。Managed Provider是ADO.NET中的一个核心内容, 它描述链接的类型并协调应用程序和Data Set对象与数据库之间的通信。正是因为Managed Provider提供了Data Set和数据中心 (就是数据库) 之间的联系, 包含了对数据中心存取的一系列应用程序编程接口 (API) , 才使得编写应用程序的程序员在实现访问各种数据源的数据时, 只需通过Managed Provider所提供的应用程序编程接口 (API) , 而无需了解其内部的实现细节。

(2) Data Set。Data Set是ADO.NET的中心概念, 所有ADO.NET对象的基本原理和根源都是Data Set对象模型。在Data Set的内部是用XML来描述的, 借助XML可以描述具有复杂关系的数据, 比如最常见的父子关系等。Data Set具有的一个明显的技术优势, 就是能够容纳复杂关系的数据。Data Set不依赖于数据源 (如数据库) 而独立存在于内存中, 是一个离散的数据对象, 可以把Data Set想象成内存中的数据库, 也就是把它理解为一个简单、独立和存在于内存中的数据库视图。一个Data Set可以包含任意数目的表, 每个表一般对应于一个数据库表或视图。

2. 通过ADO.NET访问数据库。

(1) 导入名称空间。ADO.NET提供2种托管提供程序用于访问不同的数据源, 它们分别拥有不同的名称空间定义。如果想要访问数据库, 就需要将这些名称空间导入到相应的应用程序中。

(2) 连接数据库。无论使用何种方式对数据库进行数据操作, 很重要的一步就是要建立与数据库的链接。建立一个链接, 则需要创建一个SQLConnection类对象。SQLConnection类对象包含在名称空间System.Data.Sql Client中。

(3) 执行有关SQL查询语句操作。创建好链接后, 需要一种机制实现对数据库进行操作, 实际上就是对数据库执行相关的SQL语句。为完成这一任务, 需要创建一个SQLCommand类对象。SQLCommand类对象包含在名称空间System.Data.Sql Client中。

ADO.NET编程之基础知识 第4篇

一.ADO.NET基础

程序和数据库交互,要通过ADO.NET进行;通过ADO.NET就能在数据库中执行SQL了。ADO.NET中提供了对不同数据库的统一操作接口(ODBC)。另外还有一种操作数据库的接口是JDBC。

ADO.NET中通过SqlConnection类创建到SQL Server的链接,Sqlconnection代表一个数据库的链接,ADO.NET中的链接等资源都实现了IDisposable接口。

实现了IDisposable接口的对象,在使用完了,要进行资源的释放。调用Dispose()方法。

连接方式访问数据库,连接要打开,使用完要关闭。关闭之后,还可以再打开,这就是Close和Dispose的区别。Dispose(),是完全释放资源。

现在来测试一下,连接数据库是否成功了。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//使用ADO.NET技术,必须要导入这两个命名空间using System.Data;using System.Data.SqlClient;//namespace ADO.NET1{ class Program { static void Main(string[] args) {//创建数据库连接(连接字符串)string sqlCon = “server=.;database=DB_MyStudentLife;uid=sa;pwd=Password_1”;SqlConnection scon = new SqlConnection(sqlCon);//打开数据库连接 scon.Open();//测试,判断数据库的连接状态if (scon.State == ConnectionState.Closed){ Console.WriteLine(“连接数据库失败”);}if (scon.State == ConnectionState.Open){ Console.WriteLine(“成功打开连接数据库,连接成功”);}Console.ReadKey(); } }}

测试效果图:

最后我们来看看SqlConnection对象的内部原理吧:使用反编译工具reflector就可以;

1.从图中,我们看出来,SqlConnection继承了DbConnection类,实现了ICloneable接口

2.ICloneable接口里面是啥样子呢,我们来看一下,反编译:

3.接下来,我们看下Dbconnection类:

从图中可以看出,Dbconnection类是一个抽象类,继承了Component类,实现了IDbConnection接口,和IDisposable接口,下面我们分别来看看这几个

4.Component类:

看得出来这个类,也实现了IDisposable接口哦,

好了,其他还是来看看IDisposable接口内部的神秘面纱吧:

看得出来,IDisosable定义了一个Dispose(),抽象无返回值的方法,

ADO技术 第5篇

关键字:ADO.NET;XML;XSD架构;DataSet

微软ADO.NET使用XML作为管理数据与在数据源和DataSet对象之间移动数据的格式,而且在ADO.NET应用程序中可以直接处理XML格式的数据。XML是当今的开发领域的一种热门技术。使用它可以存储数据。在某些情况下,XML文档类似于ADO.NET DataSet或ADO Recordset。程序员采用VB或ASP等以前的开发技术时,一般都是只使用XML或数据库访问技术(ADO)中的一种,因为这两种技术不能真正一起工作,无法让程序员轻松的在XML文档和ADO Recordset之间移动数据。

但ADO.NET的新功能允许把Recordset内容保存为XML格式,可以将XML数据重新加载到Recordset中。ADO.NET成为了XML和数据访问技术之间的桥梁,它很容易将这两种技术集成在一起。使得操作者可以容易的将XML文档的数据加载到ADO.NET DataSet中,反之使用某种数据库也可以从数据库中以XML形式查找数据,并将结果存储在ADO.NET DataSet或XML文档中。也可以使ADO.NET DataSet和XML文档同步,这样对两者中的任意一个所做的更改就可以再另一个中看到。

如何具体实现使用ADO.NET读取XML呢?

首先,要创建XSD架构。XSD架构提供了DataSet中的关系数据与XML文档中的数据之间的映射。XSD架构定义了DataSet中的数据结构,所以数据可以用XML格式表示和使用。我们可以使用Visual Studio.Net生成XSD架构。即在Visual Studio.Net开发环境中使用Visual Studio架构设计器来创建和编辑XSD架构文件,也可以使用记事本等简单文本编辑器来创建架构文档。显然前者的方法更简单。

其次,要将架构和数据加载到DataSet对象中。为什么要将XSD架构加载到DataSet中呢?因为可能需要从XML数据文件中将数据加载到DataSet对象中。在加载数据之前,必须在DataSet中创建关系数据结构。操作共分三步。

第一步,我们可以通过下列方法将架构加载到DataSet。第一种,使用XSD架构。当把XSD文件加载到DataSet时,DataSet会根据XSD架构中描述的数据结构生成表、关系和约束。这种关系的表示并没有捕获XSD文件所表示的所有细节,而是仅仅使用了在关系模型中构造表、列、数据类型、唯一约束和外键所必须的信息。第二种,从XML数据中推断架构。如果有一些XML数据但没有架构,可以根据XML数据结构生成架构。在某些情况下,数据有可能有二义性或不一致。因此,如果存在适当的架构就应该使用该架构,而不是从XML数据中推断架构。

第二步,当架构加载到DataSet对象后,就可以使用DataSet对象的ReadXmlSchema方法将XSD架构加载到DataSet中。加载XSD架构后,可以使用文件名、流、TextReader子类对象或XmlReader子类对象提供XSD信息。

第三步,检查DataSet元数据。将架构加载到DataSet对象或创建类型化DataSet子类的实例之后,就可以检查DataSet中表和关系的结构。DataSet对象包含表名、列名和数据类型等信息。可以使用这些信息来填充用户界面控件以显示数据。操作者可以使用DataSet对象的属性来返回关于DataSet结构的信息,如Tables、Relations、Tables.Count、Tables(index).TableName等。最后是将XML数据加载到DataSet对象中。这一步骤可以使用DataSet对象的ReadXml方法从XML文件中将数据加载到DataSet。

反之,如果我们要从DataSet中写XML格式的数据又该如何操作呢?我们同样可以通过三步操作完成。第一步,将架构写入文件、读取器或流。可以使用DataSet对象的WriteXmlSchema方法将DataSet架构保存到XSD文件、流或读取器对象中。第二步,将DataSet信息写入文件或流。可以使用DataSet对象的WriteXml方法将数据或架构信息写入文件或流。第三步,记录DataSet的更改。DataSet是本地信息的缓存。在应用程序生存期间会经常修改和删除DataSet中的数据行,或增加新数据行。尽管可以使用OleDbConnection对象和OleDbDataAdapter对象可以将DataSet中的更改传回数据库,但并不是每个应用程序都是用数据库存储或检索信息,而是使用XML,所以有可能需要在XML文件中存储更改。

这些操作方法是个人经验得出,也许还有其他不同方式,希望大家互相交流,共同进步。

参考文献:

[1]刘甫迎.C#程序设计教程(第二版)[M].北京:电子工业出版社,2008.

[2]微软公司.Microsoft visual C#.net自学教程[M].北京:中国劳动社会保障出版社,2003.

ADO技术 第6篇

ADO.NET是Mcrosoft.NET应用程序的数据访问模型。它由ADO技术发展而成, 在某种程度上, ADO.NET代表了最新版本的ADO技术。ADO.NET引入了一些重大变化和革新, 它对XML提供全面的支持, 提供了新的非连接数据缓冲模型, 使其在构建结构松散的、非链接的WEB应用程序上有着得天独厚的优势。而基于数据库的WEB应用程序一个核心功能就是为用户提供可靠和高效的数据库访问, 对数据库访问性能的优劣是评价一个Web应用程序好坏的关键标准。

2 ADO.NET的访问机制

AD0.NET是微软在.NET平台上对数据存取问题的解决方案, 在某种程度上, AD0.NET代表了最新版本的AD0技术。并且, AD0.NET也导致了一些重大变化和革新, 它专门用于结构松散的、本质非链接的Web应用程序。AD0.NET的主要特点是:断开式数据结构、与XML的紧密集成, 以及能够组合来自多个数据源的数据。

AD0.NET包括两个核心组件:.NET框架下的数据提供程序 (Data Provider) 和数据集 (DataSet) 。前者实现数据操作和对数据的快速、只读访问, 后者代表实际的数据。ADO.NET体系结构如图1所示。

(1) .NET Framework数据提供程序。

DataProvider组件包括Connection、Command、DataReader和DataAdapter4个对象。其中, Connection对象提供与数据源的连接;Command对象是访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令;DataReader从数据源中提供高性能的数据流;DataAdapter使用.NETFramework数据提供程序的Connection对象连接到数据源, 使用Command对象从数据源中检索数据并将更改解析回数据源。

(2) DataSet。

如图1所示, DataSet主要由两部分组成:DataTableCollection和DataRelationCollection。DataTableCollection包含零个或多个DataTable对象。一个对象代表驻留内存的数据表, 它包含DataColumn所表示的列和Constraint所表示的约束的集合, 这些列和约束一起定义了该表的结构。DataTable还包含DataRow所表示的行的集合, 每个DataRow对象代表表中的一行数据。DataRelationCollection代表DataSet对象中表之间的关系集合, 关系由对象DataRelation来表示。

3 ADO.NET的两种访问数据库的模式

对于不同的应用需要, ADO.NET提供了两种模式来访问数据源中的数据:使用DataReader对象进行基于连接的访问和使用DataAdapter对象进行非连接的访问。由于这两种模式的设计目的不同, 所以在应用程序开发中应该根据实际需要, 选择合适的数据库访问模式以发挥出AD0.NET的最佳性能, 这对于提升应用程序性能有着非常重要的意义。下面对两种访问模式进行分析和比较。

3.1 基于连接的访问模式

基于连接的访问模式是基本的数据访问模式.也是实际应用开发中最常采用的模式。这种数据访问模式会占用一个数据库连接, 然后读取数据.每个数据库操作都要通过这个连接来与后台的数据源进行交互。基于连接的访问模式是通过DataReader对象来实现的, DataReader对象在已经建立的数据连接的基础上, 提供对数据源的向前、只读的在线数据访问方式对数据源数据进行遍历。由于对数据源中的数据进行顺序访问, 且在任一时刻只有一条记录位于内存的缓存区中, 因此对大量数据的检索时DataReader对象能够提供很高的效率。

3.2 非连接的访问模式

非连接的访问模式是以Dataset为中心的数据访问模 式, DataSet是一个非连接的、与数据源无关的类。DataSet本质是内存中缓存区, 用于缓存关系型数据, 不论DataSet中包含的数据是来自于XML文档、关系型数据库还是通过用户接口以编程方式输入的, 数据的表示方式均相同。通过DataAdapter对象对数据源中的数据进行过滤, 将需要的数据导人到DataSet中, 在DataSet中数据表格可以单独存放, 也可以通过DataRelation对象在表格之间建立关联, 增加了数据处理的灵活性。DataSet对象的创建将同时导致多个子对象——包括DataTable、DataRow、DataColumn及作为这些子对象的容器的集合对象的创建。

4 ADO.NET性能优化模型

要开发出一个能以有效的方式来检索和存取数据的ASP.NET应用程序, 就应该编写高效率高性能经过优化的ADO.NET数据访问代码, 充分发挥ADO.NET的优势。为达到这一目的, 需要对AD0.NET的不同优化技术和使用方法进行全面的分析, 并给出客观的性能测试, 特别是数据存取性能上。

ADO.NET数据访问的性能优化内容如图2所示, 即:连接池的性能分析;.NET数据提供程序选择比较使用;DataReader, DataSet和RecordSet的性能比较分析;存储过程的性能分析;DataSet和DataReader的调用细节性能分析等。

5 结论

ADO.NET作为微软推出的面向分布式应用及面向Internet多层应用的数据访问模型, 给开发人员提供了数据访问的可供选择的高效方法, 本文讨论分析了在具体应用中对数据访问模式的选择, 同时, 提出了对数据访问性能优化的模型。在具体的应用中, 只有根据数据访问的需要灵活运用, 才能够使应用程序获得最大的数据访问效率。

摘要:阐述了ADO.NET的结构与数据模型:数据提供程序和数据集。探讨了利用ADO.NET技术访问数据库访问的两种方式, 并且提出了Web数据库访问的性能优化模型。

关键词:ADO.NET,数据集,数据库访问,连接池

参考文献

[1]孔延香, 李永忠, 郭秀峰.ADO.NET数据库访问技术研究与实现[J].现代电子技术, 2005, (16) .

[2]田丽平.基于ASP.NET的科研管理信息系统的建立[J].内蒙古农业大学学报, 2007, (01) .

[3]魏峥.ADO.NET程序设计教程与实验[M].北京:清华大学出版社, 2007.

[4]李万宝.ASP.NET技术详解与应用实例[M].北京:机械工业出版社, 2005.

VB中ADO访问数据库技术探讨 第7篇

关键词:数据库访问,ADO,对象模型

0 引言

Visual Basic是一种可视化的、事件驱动运行机制的Windows应用程序开发工具, 在数据库开发方面具有强大的功能。目前在Visual Basic中开发数据库程序主要有DAO、RDO、A-DO3种数据库开发技术。其中最流行的是ADO。它是建立在基于低层数据访问接口OLE DB (Objects Link and Embedding Data Base, 对象连接与嵌入数据库) 技术上的数据对象。

ADO设计为一种极简单的格式, 通过ODBC的方法同数据库接口连接。用户可以使用任何一种ODBC数据源, 即不仅适合于SQL Server、Oracle、Access等数据库, 也适合于Excel表格、文本文件、图形文件和无格式的数据文件。

1 ADO对象模型及功能

ADO按照访问和更新数据源的顺序定义了一个模型, 在这个对象模型中包含了7个对象, 它们的具体功能是:

(1) Connection对象。Connection对象用于建立与数据库的连接, 通过连接可从应用程序访问数据源。它保存诸如指针类型、连接字符串、查询超时、连接超时和缺省数据库这样的连接信息。

(2) Error对象。包含数据提供程序出错时的扩展信息。

(3) Property对象。包含某个ADO对象的提供程序定义的特征。

(4) Command对象。包含关于某个命令, 例如查询字符串、参数定义等信息。在建立Connection后, 可以发出命令操作数据源。一般情况下Command对象可以在数据库中添加、删除或更新数据, 或者在表中进行数据查询。Command对象在定义查询参数或执行一个有输出参数的存储过程时非常有用。

(5) Parameter对象。包含参数化的Command对象的某单个参数的信息。该Command对象有一个包含其所有Parameter对象Parameters集合。

(6) Recordset对象。用来存储数据操作返回的记录集。Recordset对象只代表一个记录集, 这个记录集是一个连接的数据库中的表, 或者是Command对象的执行结果返回的记录集。在ADO对象模型中, 在行中检查和修改数据是最主要的方法, 所有对数据的操作几乎都是在Recordset对象中完成的。Record对象用于指定行、移动行、添加、更改、删除记录。

(7) Field对象。包含记录集中数据的某单个列的信息。掌握其中的Command、Connection、Recordset对象就可以实现基本的数据库操作。

2 使用ADO访问数据库的两种方式

在VB中, 使用ADO访问数据库主要有两种方式, 一种是非编程访问方式, 使用ADO Data控件方式, 通过对控件的绑定来访问数据库中数据, 另一种是ADO对象模型编程访问方式, 通过定义对象和编写代码来实现对数据的访问。

(1) 使用非编程访问方式ADO Data控件访问数据库。 (1) 在工具箱中添加ADO Data控件, 操作为:选择工程菜单中的部件选项, 再选择“Microsoft ADO Data Control”; (2) 在窗体上把新出现在工具栏的ADO Data控件拖入; (3) 设置相关属性。

(2) 使用编程访问方式ADO对象模型访问数据库 (可以插入代码) 。 (1) 引用ADO对象库。操作为:“工程”菜单下选择引用选项, 再选择“Microsoft Activex Data Object 2.6 Library; (2) 为了能够在程序中使用ADO对象, 首先需要声明该对象, 然后才能连接数据库进行操作。

下面是在VB中利用ADO模型进行数据库连接输出报表的一个实例程序。

3 ADO两种访问方式比较

使用ADO Data控件在连接数据库时, 不需要创建连接对象和记录集对象, 直接设置相关属性就可以了, 简化了编程, 但在功能上有所限制, 对数据库的连接在程序运行时难以改变, 在访问大型数据库时效率比较低。如果通过对象模型编程方式连接数据库时, 则对数据库的操作非常灵活, 效率上也会大大提高。

4 结束语

ADO是DAO/RDO的后继产物, 作为最新的数据库访问模式, 微软已经明确表示今后把重点放在ADO上, 已经成为了当前数据库开发的主流。它具有功能强、通用性好、效率高、占空间少等特点。通过对ADO Data控件属性设置和利用ADO对象模型编程来访问数据库的两种方式都体现了这些特点, 我们在实际开发中, 对数据库的操作更适合采用对象模型编程方式, 以便更灵活地对数据库进行操作。

参考文献

[1]肖必武.Visual basic程序设计[M].北京:中国铁道出版社, 2007.

ADO技术 第8篇

讲座应用 的软件环 境 : Borland Delphi7.0、Rem Objects6.0.43.801和Microsoft Excel 2003。

ADO的全名是Active X Data Object ( Active X数据对象 ) 是一组优化的访问数据库的专用对象集, 它为用户提供了完整的站点数据库解决方案其他作用在服务器端, 通过执行SQL等命令, 让用户在浏览器画面中输入、更新和创建站点数据库的信息 。ADO是微软的 对计算机 数据接口 的一种标 准 , 象Microsoft的其它系 统接口一 样 , ADO是面向对 象的。它 是Microsoft全局数据访问 (UDA) 的一部分 ; Microsoft和其他数据库公司在它们的数据库和Microsoft的OLE数据库之间提供了一个" 桥" 程序, OLE数据库已经在使用ADO技术。

ADO主要包括Connection, Recordset和Command 3个对象, 它们的主要功能如下:

(1) Connection对象 : 负责打开或连接数据库文件。

(2) Recordset对象 : 存取数据库的内容。

(3) Command对象 : 对数据库下达行动查询指令 , 以及执行SQL Server的存储过程。

在这一讲中, 将揭示在Delphi中使用ADO是如何轻而易举 , 结合了ADO的Delphi应用程序 , 将不再依 赖于BDEADO是一组COM组件的集合 , 允许程序员利用利用少量的简单代码访问数据库。

ADO通常和OLEDB、Universal Data, Access以及Microsoft Data Access Components (MDAC) 联系在一起。OLEDB产生较ADO为早, 是后期各种技术的基础。

主要技术: ADO的精髓在于利用简单的COM指令来快速方便地访问ODBC数据源, 微软的表格、列表框等Active X控件使得用户可以简便地利用ADO工作; 向您展示了如何利用程序访问数据库, 将不采用任何可视化数据控件。

将向您展示如何利用Variant或interfaces访问和修改ADO数据库 , 示例程序 非常简单 , 首先新建 一个工程 文件 :procject.dpr, 单元文件为mainform.pas, 可运行于Delphi。

如果已经安装了ADO, 会在计算机中发现MSADO15.DLL( 在C:Program FilesCommon FilesSystemado目录 ) , 这个文件中包含了一个类库, 其中包括了利用ADO编程所需的全部接口和常量。

Setup1. 在Delphi中 , 选择菜单Project -> Import -> TypLibrary, 选择以上的DLL文件 , 添加进来后如图1所示的列表中就能找到Microsoft Active X Data Objects2.8 Library。

Setup2. 创建ADODB单元 : 选择图1中Create unit, 然后确定 , 系统生成 了一个基 于ADODB.DLL的ADODB_TLB.Pa文件, 这个文件中包含了所有Delphi ADO编程所需的声明。

Step 2, 创建数据 显示窗口 : 为了美化 客户端界 面 , 在Delphi环境中安装了第三方的Sui Pack.v6.5组件集合。然后在mainform.pas的窗体文件Form1上添加如下的Suipakc组件。

一个sui String Grid组件, 用于显示数据。

一个sui Form控件。

一个sui Page Control, 可类似Excel Sheet方式。

一个sui Edit控件, 用于编辑数据。

一个sui Radio Group控件, 用于数据的打开方式。

两个sui Button控件, 分别用于执行打开数据的命令和执行更新数据命令。

Step3. 设置系统ODBC数据源 : 其工作就是将Delphi示例数据库 中的Students.dbf设置为ODBC系统DSN, 其别名为DBDemos DBase, 驱动程序为Dbase 5。如图2所示。

然后就是声明几个必须的procedures:

procedure Open Interface (Sender:TObject) ; — ——以 interface方式打开数据。

procedure Open Variant (Sender:TObject) ;— ——以 variation 方式打开数据。

procedure Display ( Record Set: _Record Set) ;———在单元格中显示数据。

procedure Set Optimal Grid Cell Width (sg: Tsui String Grid; Exclude Columns: TExclude Columns) ;———自动调整单元格的宽度。

其他的过程和功能代码详见程序清单。

以下程序清单同时利用Variants和Interfaces访问ADO:

无论你用的是Variants还是Interfaces, 这段代码都将正常工作。

当你的数据集以可读写的方式打开时, 如ad Lock Optimistic方式, 就可以修改数据库的内容了:

Record Set.Fields[0].Value :=sui Edit1.Text;

Record Set.Update(Empty Param, Empty Param);

这段代码可以修改当前记录的内容。当然也可以利用字段数组以及Move方法修改任何记录。如果用的是Variants方式,可以不传递任何参数。程序执行的结果如图3所示。

在这个例子中, 采用了一种简单的方法来编辑表中的信息。如果用户在某一记录内容上单击, 其数值会显示于编辑框中。并通过更新按钮实现了简单的更新数据, 代码见相应部分。

在更新按钮的代码中仅有4行:

第一行将数据集指针移动到表格当前行, 第二行修改数据, 第三行提交修改。

最后一步将把数据集指针移动到第一条记录, 然后调用相应的过程代码显示修改后的数据库。

知识点回顾: 本次讲座利用Delphi7.0 ADO和ODBC技术实现不同方式读取常用数据库文件的技术途径, 一方面展示了ADO的功能和灵活性 , 另一方面通过将数据在String Grid中显示方法, 体现了Delphi在数据处理的优势。

ADO技术 第9篇

在某些方面, AutoCAD的命令功能还无法满足专业设计、绘图的需要, 因此还需要利用AutoCAD的开放性来改善原AutoCAD命令使用不便捷的问题, 或者增加一些原来没有的功能, 这将大大提高绘图效率。AutoCAD的开放性具体体现在它提供了多种二次开发程序设计语言, 如AutoLISP、VisualLISP及VBA等程序设计语言。VBA是一个面向对象的程序设计环境, 提供类似VB语言的功能。更重要的是, VBA不仅可以控制AutoCAD的内部对象, 还可以在其他的应用程序与AutoCAD之间传送或存取数据[1]。

本研究将具体阐述如何利用VBA在AutoCAD中实现轴、孔公差的自动标注。

1传统轴、孔公差的标注过程

在AutoCAD绘图软件中进行轴、孔的公差标注时, 需要执行“dimstyle”命令打开标注样式管理器, 点击“修改”按钮, 在弹出的“修改标注样式”对话框中选择“主单位”选项卡, 在前缀 (X) 栏中输入“%%c”用来显示轴、孔的标志符号“Φ”, 将后续消零检查框选中。另外再选择“公差”选项卡, 在“公差格式方式”下拉框中选择“极限偏差”, 为防止上、下偏值小数点后第3位被舍弃, 需在精度下拉框中选择“0.000”, 即保留3位小数, 精度缺省值是“0.00”。然后在上、下偏差栏中分别输入从轴、孔极限偏差表中查得的偏差值后, 方可进行标注。而且每次标注都需要重新查表、设置, 效率低下。

2利用VBA实现轴、孔公差的自动标注

本研究利用AutoCAD中内嵌的VBA接口编制一段程序实现轴、孔公差的自动查表, 设置系统变量并标注, 可为设计绘图工作省下一些时间并且在一定程度上减轻了工作量。

将上、下偏差数据直接写在VBA程序中, 由选择语句 (select case) 根据具体条件进行判断选择, 会造成程序过长、查错困难且不易对程序及偏差数据进行维护。为避免上述缺点, 需将偏差数据存入ACCESS文件、EXCEL文件或者其他数据文件中[2]。本研究采用EXCEL文件存储上、下偏差数据。为了方便、直接地访问数据源, 本研究采用了ADO技术。它是微软公司在开发环境中引入的数据访问对象模型, 通过ADO建立AutoCAD中VBA开发环境与EXCEL文件之间的连接, 可以很方便地存取数据[3]。

2.1ADO及VBA开发环境准备

打开AutoCAD程序, 选择“工具”→“宏”→“Visual Basic编辑器”菜单项进入VBA IDE环境, 如图1所示。在代码编辑器中输入程序代码后保存, 即会生成一个后缀为.dvb的VBA工程文件, 将其命名为gcdim.dvb, 存于任意位置均可。因为要用到ADO技术, 保存前在VBA IDE环境中选择“工具→引用菜单”项, 在弹出的引用对话框中选择Microsoft ActiveX Data Objects 2.0 Library (如图2所示) , 确认检查框被选中, 若没有引用此项, 程序执行时会产生错误[4,5,6]。

2.2标注功能程序实现

2.2.1 保存系统变量并定义相关变量

因为要连接数据文件, 应定义一些变量来处理ADO的相关连接、指令及记录组等。另外, 在程序的开头部分需定义一些中间变量用于存放过程数据及保存相关的系统变量。定义过程名为“gcdim” (也可以作其他命名) , 以后调用时必须输入事先定义的过程名, 然后以“GetVariable () ”将系统变量存入定义好的中间变量, 相关系统变量的意义分别为:“dimtp”表示上偏差值;“dimtm”表示下偏差值;“dimtol”及“dimlim”表示是否以极限偏差形式标注;“dimtdec”表示标注的精度值;“dimtzin”表示标注值是否消零;“dimpost”表示标注前导值等等。之后, 还需要定义一组“Variant”变量用来记录用户输入点的坐标。

部分程序如下:

2.2.2 接收用户输入

要求用户输入各点位置及参数的程序如下 (程序提示用户输入示意图如图3所示) :

pt1 = ThisDrawing.Utility.GetPoint (, “指定第1条尺寸界线原点或 <选择对象>:”)

pt2 = ThisDrawing.Utility.GetPoint (, “指定第2条尺寸界线原点:”)

locpt = ThisDrawing.Utility.GetPoint (, “指定尺寸线位置:”) ’按AutoCAD中Dimlinear命令提示内容, 提示用户输入尺寸界线原点及尺寸线位置

X = ThisDrawing.Utility.GetString (False, “指定公差代号:”) ’提示用户输入公差代号

2.2.3 根据用户输入判断并计算尺寸数值

根据用户输入的各点位置来判断并计算实际尺寸值的程序如下:

End If ’利用两个嵌套的复合条件语句, 并根据用户输入的尺寸界线原点、尺寸线位置相对关系计算实际尺寸值, 存于dist变量中。

2.2.4 连接数据文件并查出偏差值

连接数据库并根据实际尺寸值及公差代号查出上、下偏差值, 实现自动标注的程序如下 (自动标注效果图如图4所示) :

2.2.5设置相关变量并实现标注部分程序如下所示:

2.2.6关闭记录、连接, 释放内存, 激活视图, 恢复统变量

恢复AutoCAD系统变量原始值的程序如下:

2.2.7程序错误处理部分错误处理部分程序如下:

4结束语

本研究介绍了以DSP为核心的磁悬浮轴承控制系统的硬件电路, 包括硬件电路总体结构, 滤波及电压转换电路, 高速A/D和D/A的实现方式以及功率放大器电路。通过LabVIEW监控系统采集的波形, 证明了上述设计能够满足实际磁悬浮轴承静态悬浮的控制要求在磁悬浮轴承从静态悬浮到转速为21 000r/min的实验中, 轨迹没有超出监控范围, 取得了良好的效果。

摘要:为了提高设计绘图效率, 通过ADO及VBA开发环境接收用户输入, 根据输入进行判断和计算后, 连接数据文件并查出偏差值以进行标注, 最后关闭记录、连接, 释放内存, 激活视图, 恢复系统变量。最终在AutoCAD中利用VBA程序设计语言及微软的ADO技术, 实现了根据用户需求对轴、孔公差的自动标注。测试结果表明, 该技术可使得AutoCAD中的公差标注更加快速准确。

关键词:AutoCAD,VBA,ADO,轴、孔公差,自动标注

参考文献

[1]MCFARLANE S.AutoCAD数据库连接[M].罗阿理, 卢迪译.北京:机械工业出版社, 2001.

[2]任继文.用VBA实现AutoCAD图形明细表与数据库的链接[J].机械设计与制造, 2004 (3) :40-41.

[3]王永杰, 周振红, 苗丽.AutoCAD和Excel间的数据通信[J].河南科学, 2004, 22 (4) :129-131.

[4]林龙震.AutoCAD 2000/2000 i/2002程序设计基础教程[M].北京:科学出版社, 2002.

[5]张国宝.AutoCAD 2000 VBA开发技术[M].北京:清华大学出版社, 2000.

ADO技术 第10篇

客户端与数据库存取模式在A-DO.NET有连接与脱机模式两种,连接模式适用于数据量比较少的状况,脱机模式则适用于数据量比较多的状况。以SQL Server数据库为例来说明两种不同的数据读取方式。

1.1 连接模式

假定在一个Combo Box控件中显示所有的员工姓名,可进行如下操作:

利用Connection、Command和DataReader对象连接数据库的存取方式,因为从头到尾都是保持连接的状态,所以这种方式并不适合在数据量大的状态或是Internet的环境中。DataReader对象只是一个只读的对象,只能从头到尾进行读取数据的操作,不能修改记录。如果只是想查询记录的话,这种方式的效率更高些。但不能再次从头进行读取的动作,要解决这个问题,就需再次建立Command对象,并在这个对象中进行数据存取的操作。

1.2 脱机模式

假定利用一个DataGrid控件显示所有员工信息,可进行如下操作:

DataSet在ADO.NET中非常重要,利用Connection、Command、DataAdapter和DataSet对象,可针对任何一种类型数据进行存取操作,这种方式更灵活,同时还拥有数据库应有的主要功能。是在客户端的内存中通过DataAdapter对象切割出一块空间,并将Command对象向数据库所获得的数据放入其中,此时客户端数据存取直接针对这块内存空间进行,而且速度很快。

2 数据库的添加、删除和修改

2.1 在DataGrid控件中进行数据更新

(1)在窗体中定义各种对象

(2)在Form_load事件中添加如下代码,利用Data Grid控件显示数据

(3)在添加数据事件中输入如下代码,数据通过文本框录入

(4)在删除事件中输入代码

(5)在修改事件中输入代码

在这种方法中,通过DataSet的Table对象的行Rows进行数据的添加和删除,再通过DataAdapter对象的Update方法更新实际的数据库。这种方法代码少,对数据量较少的情况操作比较方便,但数据量大的时候,因为要通过DataGrid控件查找记录,而不能通过条件查找,比较费时,不方便。

2.2 利用Command对象操作数据库

(1)在添加数据事件中输入如下代码,数据通过文本框录入

(2)在修改事件中输入如下代码

(3)在删除事件中只需将修改事件中的SQL语句改为

从以上代码可以看出,方法的核心就是设定Command对象的命令文本Command Text,可以为各种SQL语句,然后利用Command对象的ExecuteNoQuery方法执行SQL操作,就可直接进行数据库的存取。方法非常灵活,可以按条件查找到相应的记录再进行操作,难点是组合SQL语句比较复杂,容易出错。

2.3 利用Command对象的Parameter进行操作

无须组合复杂SQL语句,以添加记录为例(只给出关键代码):

SQL语句组合比较简洁,操作也很灵活,成为ADO.NET中最常用的数据存取操作方法。

3 结束语

通过以上几种方法的比较,可加深对ADO.NET中数据库访问技术的理解,从而采取最合适方式进行操作。

参考文献

[1]金旭亮.编程的奥秘-.NET软件学习与实践[M].北京:电子工业出版社,2006-01:244-249.

[2]郭瑞军.Visual Basic.NET数据库开发实例精粹[M].北京:电子工业出版社,2006-05:125-128.

[3]康祥顺.Visual Basic.NET案例开发集锦[M].北京:电子工业出版社,2006-01:418-424.

上一篇:生物工程与药物输送下一篇:早期产前诊断