ADO.NET数据库访问技术

一. ADO.NET的定义


ADO.NET来源于COM组件库ADO(即ActiveX Data Objects),是微软公司新一代.NET数据库的访问模型,是目前数据库程序设计人员用来开发基于.NET的数据库应用程序的主要接口。它利用.NET Data Provider(数据提供程序)进行数据库的连接和访问,通过ADO.NET数据库程序能够使用各种对象来访问符合条件的数据库内容,让提供数据库管理系统的各个厂商可以根据此标准开放对应的.NET Data Provider,这样设计数据库应用程序人员不必了解各类数据库底层运作的细节,只要掌握ADO.NET所提供对象的模型,便可访问所有支持.NET Data Provider的数据库。

ADO.NET结构模型如下所示:

图1. ADO.NET结构模型

ADO.NET是一个类库,这些类提供了很多的对象,可用于完成数据库连接和增删查改等操作。其中包括如下五个对象: 1)Connection:用来连接数据库(SQL Server使用的是SqlConnection对象); 2)Command:用来对数据库执行SQL命令,如增删查改等操作; 3)DataReader:用来从数据库中返回只读数据,用数据源填充DataSet对象; 4)DataAdapter:与DataSet对象相结合使用,实现对数据库的控制; 5)DataSet:可看作离线时内存中的数据库; 这五个对象提供了两种读取数据库的方式; 第一种方式:使用Connection、Command、DataReader,其权限只能读取或查询数据库; 第二种方式:使用Connection、Command、DataAdapter、DataSet,其权限能进行各种数据库的操作。 ADO.NET读取数据库操作示意图:

图1. ADO.NET结构模型

二. 使用ADO.NET在线访问数据库的步骤(这里用的是SQL Server 数据库)
 
1. 连接数据库
直接上一段代码:

using System.Data.SqlClient;
string source = "server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa";
SqlConnection conn = new SqlConnection(source);
conn.Open();
// 对数据库数据进行操作
conn.Close();

(1). 首先添加命名空间System.Data.SqlClient;

(2). 定义数据库连接字符串:

第一种方法:直接把数据库连接字符串存放在字符串对象中,如上代码所示;

第二种方法Web:将数据库连接信息存放在web.config配置文件中,然后通过使用ConfigurationStringSettings类进行调用。来个例子说明一下:

(a). 首先,在web.config配置文件的部分定义数据库连接信息:

<configuration>
<connectionStrings>
<add name="myDatabase" connectionString="server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

(b). 在项目文件中,添加对Configuration的引用,在头部添加using System.Configuration。然后定义数据库连接字符串为:

代码如下:

string connstring = ConfigurationManager.ConnectionStrings["myDatabase"].ConnectionString;

备注:必须添加对System.Configuration程序集的引用,才能解析上述代码中使用的ConfigurationManager类。

2. 创建数据库连接
1)创建Connection对象:

string conn = new SqlConnection(connString); 

2)打开数据库: conn.Open(); 一般情况下,当在.NET中使用“稀缺”的资源时,如数据库连接、窗口或图形对象,最好确保每个资源在使用完毕后立即关闭。尽管.NET的设计人员实现了自动垃圾收集机制,垃圾最终会被回收,但仍需要尽可能早地释放资源,以避免出现资源匮乏的情况。 当编写访问数据库的代码时,因为使连接打开的时间略长于需要的时间,就可能影响其他会话。在极端的情况下,不关闭连接可能会使其他用户无法进入一整组数据表,极大地降低应用程序的性能。主要有两种方式可以确保数据库连接等类似的“稀缺”资源在使用完后立即释放。这两种方式如下: (1)第一种方式:采用try...catch...finally语句块 确保在finally中关闭任何已打开的连接。

try {
// open the connection
conn.Open();
// 对数据库数据进行操作
} catch (SqlException ex) {
// log the exception
} finally {
conn.Close();
}

在给定的方法中可能会打开许多资源,这样try...catch...finally块的层次有时候不容易看清。还有一种方式可以确保资源的关闭——using语句。 (2)使用using语句块

using(SqlConnection conn = new SqlConnection(connstring)){
// Open the connection
conn.Open();
// 对数据库数据进行操作
}

无论块是如何退出的,using子句都会确保关闭数据库连接。

3. 创建数据库操作命令:

Connection对象与数据源建立连接后,使用Command对象对数据源执行查询、插入、修改和删除等操作。

(1) 创建SQL数据库操作命令: sqlQuery查询语句具体规则请详见我的系列文章:【读书笔记】SQL Server查询语句_邓智容 (2) 创建Command对象:

(a). 方法一:

代码如下:

SqlCommand command = new SqlCommand(); command.Connection = conn; command.CommandText = "SQL语句";

(b). 方法二:

SqlCommand command = new SqlCommand("SQL语句", conn); 

备注: 1). SQL查询语句若含有C#程序的变量并以字符串形式连接,则应注意数据为非数字的变量应用单引号括起来; 2). 在SQL查询语句中使用参数化查询语句的话,譬如:

command.CommandText = "SELECT * FROM myTable WHERE siteName=@siteName"; 

当需要给该参数赋值时,可以使用Command对象建立参数对象,然后再赋值:

代码如下:

command.Parameters.Add(new SqlParameter(@siteName, siteName)); command.Parameters["@siteName"].Value = "http://#";

备注: 在.Net Framework 2.0中SqlClient增加了AddWithValue(string parameterName, object value)方法。该方法简化了调用储存过程的输入参数过程,在运行时对所输入的数据类型进行判断,获取对应的数据库类型。 因此该方法在运行效率上比用 Add(string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)方法要低。 在效率要求较高的地方仍然建议使用Add()方法,其它场合可以使用AddWithValue()简化代码编写量。

4. 执行sqlQuery命令:

定义好命令后,就需要执行它。执行的语句有多种方式,这取决于要从命令中返回什么数据。Command类提供了下述可执行的命令: (1) ExecuteNonQuery() —— 执行命令,但不返回任何结果。一般用于UPDATE、INSERT或DELETE语句中,其中唯一的返回值是受影响的记录个数。但如果调用带有输出参数的存储过程,该方法就有返回值。 (2) ExecuteReader() —— 执行命令,返回一个类型化的IDataReader。是从数据源中选择某些数据的最简单快捷的方法。 (3) ExecuteScalar() —— 执行命令,返回结果集中的第一行第一列的值。

5. 对数据库操作完毕后关闭数据库连接:

conn.Close();

三. 离线数据库访问

DataAdapter对象主要在Connection对象和DataSet对象之间执行数据的传输工作,将数据填充到DataSet对象中,也可把DataSet对象更新后的数据返回到数据源中,也可架构在Command对象上,通过CommandBuilding对象生成DataAdapter的Insert、Update和Delete等SQL操作命令。使用DataSet和DataTable对象访问数据源后,ADO.NET会自动离线,在内存中处理数据,如有修改数据的操作,将自动重新连接数据源,更新数据库。DataSet对象、DataAdapter对象与数据源之间的关系如下:

DataSet <---> DataAdapter <---> 数据源
下面是使用DataAdapter进行离线数据库访问的操作步骤:

1. 创建DataAdapter、DataTable对象(使用的是SQL Server数据库)

代码如下:

SqlAdapter da = new SqlAdapter("sqlQuery查询语句", conn); DataSet = ds = new DataSet(); DataTable dt = new DataTable();

2. 将数据填充到DataTable对象

da.Fill(ds, "TableName"); dt = ds.Tables["TableName"]; 

3. 对DataTable中的数据进行处理 TataTable对象的属性和方法有:

名称 属性/方法 说明
Rows.Add() 方法 插入新数据行
Rows[n].Delete() 方法 删除第n行的记录
Rows.Count 属性 获取行数
Rows[i]["ColumnName"] 属性 获取第i行、列名为ColumnName的值
Rows[i][j] 属性 获取第i行、第j列的值
 
  还有一种数据查询技术:LINQ。下回再讨论。

通过以上对ADO.NET数据库访问技术的介绍,希望对大家有所帮助。

(0)

相关推荐

  • 用C#对ADO.NET数据库完成简单操作的方法

    数据库访问是程序中应用最普遍的部分.随着C#和ADO.NET的引入,这种操作变得更简单.这篇文章将示范四种最基础的数据库操作.  ● 读取数据.其中包括多种数据类型:整型,字符串,日期型.  ● 写数据.如读数据一样,我们也需要写入多种类型的数据.这可以通过SQL语句来完成.  ● 更新或修改数据.我们将再次用到SQL语句.  ● 删除数据.用SQL实现.  上述的操作都要基于Microsoft Access 2000数据库,但是,我们要对连接字符串进行简单的修改才能使用SQL或其他ADO数据.

  • 浅谈ADO.NET数据库脚本

    这次我使用ADO.NET来插入一条数据,到数据库中.主用到存储过程.我不想每次都是用SQL文本的形式了,那样始终没有进步--- 下面首先,我把我这次练习要用到的数据库脚本,贴出来: USE master --使用系统数据库 GO IF EXISTS(SELECT * FROM sysdatabases WHERE name=N'DB_MyStudentLife') DROP DATABASE [DB_MyStudentLife]; --如果要创建的数据库存在的话,就删除 GO CREATE DA

  • ADO.NET数据库访问技术

    一. ADO.NET的定义 ADO.NET来源于COM组件库ADO(即ActiveX Data Objects),是微软公司新一代.NET数据库的访问模型,是目前数据库程序设计人员用来开发基于.NET的数据库应用程序的主要接口.它利用.NET Data Provider(数据提供程序)进行数据库的连接和访问,通过ADO.NET数据库程序能够使用各种对象来访问符合条件的数据库内容,让提供数据库管理系统的各个厂商可以根据此标准开放对应的.NET Data Provider,这样设计数据库应用程序人员

  • ADO.NET通用数据库访问类

    本文实例为大家分享了ADO.NET通用数据库访问类,供大家参考学习,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace Test { public class DBHelper { publ

  • C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问

    一.ADO.Net数据库连接字符串 1.OdbcConnection(System.Data.Odbc) (1)SQL Sever 标准安全:" Driver={SQL Server}; Server=Aron1; Database=pubs; Uid=sa; Pwd=asdasd; " 信任的连接:" Driver={SQL Server}; Server=Aron1; Database=pubs; Trusted_Connection=yes; " (2)SQL

  • VC中使用ADO开发数据库应用程序简明教程

    本文实例讲述了VC中使用ADO开发数据库应用程序的方法.分享给大家供大家参考,具体如下: 一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据.ADO 最主要的优点是易于使用.速度快.内存支出少和磁盘遗迹小.ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量.高性能的接口.之所以

  • ADO存取数据库时如何分页显示

    究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种: 一.将数据库中所有符合查询条件的记录一次性的都读入 recordset 中,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性: PageSize( 页大小 ). PageCount( 页数目 ) 以及 AbsolutePage( 绝对页 ) 来管理分页处理. 二.根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示. 两者的主要差别在于前者是一次性将所

  • MySQL数据库优化技术之配置技巧总结

    本文实例讲述了MySQL数据库优化技术的配置方法.分享给大家供大家参考,具体如下: (一)减少数据库访问 对于可以静态化的页面,尽可能静态化 对一个动态页面中可以静态的局部,采用静态化 部分数据可以生成XML,或者文本文件形式保存 使用数据缓存技术,例如: MemCached (二)优化的检测方法 1.用户体验检测 2.Mysql状态检测 在Mysql命令行里面使用show status命令,得到当前mysql状态. 主要关注下列属性: key_read_requests (索引读的请求数)(k

  • Java数据库存取技术

    IT技术日新月异,新技术的出现令人目不暇接,似乎每一天都在产生着新名词.不过归根结底IT所要实现的价值不外乎数据收集,然后再以客户希望的形式展示给客户而已.因此数据存取技术也就成了一个永恒的话题.而在Java这个开放的世界里,数据库存取技术是五花八门,种类繁多.我们也来侃侃Java世界里主流的数据库存取技术. 首先列出英雄榜 1.JDBC直接访问数据库 2.EJB entity bean. 3.JDO技术. 4.第三方O/R工具,如目前大红大紫的Hibernate, 其它如Castor, Top

  • 数据库访问性能优化

    在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多介绍只是对一些特定的场景优化的,所以反而有时会产生误导或让程序员感觉不明白其中的奥妙而对数据库优化感觉很神秘. 很多程序员总是问如何学习数据库优化,有没有好的教材之类的问题.在书店也看到了许多数据库优化的专业书籍,但是感觉更多是面向DBA或者是PL/SQL开发方面的知识,个人感觉不太适合普通程序员.而要想做到数据库优化的高手,不是花几周,几个月就能达到的,这

  • ASP.NET对SQLServer的通用数据库访问类

    本文模仿实现数据库访问的通用类,代码清晰,而且很实用,包括了对数据库的所有的常用的操作. /// <summary> /// 数据库访问通用类 /// </summary> public class SqlHelper { private string connectionString; /// <summary> /// 设定数据库访问字符串 /// </summary> public string ConnectionString { set { con

随机推荐