1.ADO.NET简介
ODBC(Open Data Base Connectivity,开放式数据库连接)技术,建立了一种统一的应用程序访问数据库的接口,通过它,开发人员无需了解数据库内部的结构就可以实现对数据库的访问。随着计算机技术的迅猛发展,ODBC在面对新的数据驱动程序的设计和构造方法时,遇到了困难,OLEDB(Object Linking 按掉Embedding Data Base,对象连接和嵌入数据库)技术便应运而生了。随着网络技术,尤其是Internet技术的发展,大量分布式系统得到广泛的应用。为适应新的开发需求,一种的新的技术诞生了,即所谓的ADO。ADO对OLEDB做了进一步的封装,从整体上看,ADO模型以数据库为中心,具有更多的层次模型和更丰富的编程接口。而ADO.NET是ADO的最新发展产物,更具有通用性。ADO.NET技术革命性的成功实现了在“断开的”的概念下实现客户端对服务器上数据库的访问,而且做到了这一点,并不需要开发人员做大量的工作。
2.ADO.NET结构
设计ADO.NET组件的目的是从数据操作中分解出数据访问。实现此功能的是它的.NET数据提供程序和DataSet组件。结构图如下:
数据提供结构:
数据提供程序是应用程序和数据源之间的桥梁。数据提供程序都包括:
其中常用的是 SQL Server和OLE DB这个两种。
SQL Server .NET可以直接访问SQL Server而不用添加OLEDB或ODBC,更加精简,具有更好的性能。位于System.Data.SqlClient命名空间中。
OLEDB .NET 通过OLE DB 服务组件和数据源的OLE DB提供程序与OLE DB数据源通信。位于System.Data.OleDb 命名空间中。两者对比图:
DataSet数据集
它是ADO.NET断开式结构的核心组件,实现了独立于任何数据源的数据访问。DataSet从任何数据源中检索后得到的数据并且保存在缓存中,它可以包含表、所有表的约束、索引和关系。因此,可以把它看做是内存中的一个小型关系数据库。
3.NET数据提供程序的核心元素
先看一张导图所总结的各个点:
a. Connection对象
(1)连接字符串
参数 | 说明 |
Provider | 用于提供连接驱动程序的名称,仅用于OleDbConnection对象。 |
Data Source | 指明所需访问的数据源,如是访问SQL Server则指服务器名称。 |
Initial Catalog | 指明所需访问数据库的名称。 |
Password或PWD | 指明访问对象的所需的密码。 |
User ID或UID | 指明访问对象所需的用户名。 |
Connection TimeOut | 指明访问对象所持续的时间,以秒计算,如果在持续的时间内仍连接不到所访问的对象,则返回失败信息,默认值为15. |
Integrated Security或TrustedConnetion | 集成连接,可选true或false,如果为真则表示集成Windows验证,此时不需要提供用户名和密码即可登录。 |
(2)连接方法
这里比较一下Close方法和Dispose方法。
Close方法表示关闭一个已打开的连接对象,将连接释放到服务器的连接池中。而Dispose方法是移除连接,从服务器中的连接池中删除连接,以保存服务器的资源。
b. Command对象
(1)属性
名称 | 说明 |
CommandType | 三种选择,Text表示SQL语句;StoreProcedure表示存储过程;TableDirect表示直接的表。 |
CommandText | 如果CommandType指明为Text,则此属性指出SQL语句的内容。此为默认值。如果CommandType指明为StoreProcedure,则此属性指出存储过程的名称。如果CommandType指明为DirectTable,则此属性为表的名称。 |
Connection | 指定与Command对象相联系的Connection对象。 |
(2)方法
名称 | 说明 |
ExecuteReader | 执行返回具有DataReader类型的行集数据的方法。 |
ExecuteScaler | 执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。 |
ExecuteNonQuery | 对连接执行 Transact-SQL语句并返回受影响的行数。 |
c. DataReader对象
提供一种从数据库读取行的只进流的方式。若要创建 DataReader,必须调用 Command 对象的 ExecuteReader 方法。
方法 | 说明 |
Read | 使 DataReader 前进到下一条记录。 |
GetString | 获取指定列的字符串形式的值。 |
GetInt 16(32,64) | 获取指定列的16位整数形式的值。 |
d. DataAdapter对象
(1)属性
名称 | 说明 |
DeleteCommand | 用来在数据源中删除行的数据命令 |
InsertCommand | 用来在数据源中插入行的数据命令 |
SelectCommand | 用来在数据源中检索行的数据命令 |
UpdateCommand | 用来更新数据源中的行的数据命令 |
(2)方法
数据适配器支持的两个重要方法:一个是Fill,把数据从数据源加载到数据集中;另一个是Update,向另一个方向传送数据----把数据从数据集中加载到数据源中。
4.以SQL为例讲解ADO.NET数据库访问的一般过程。
(1)创建SqlConnection对象,建立数据库的连接。
(2)通过SqlCommand创建数据适配器SqlDataAdapter,建立数据库与数据集之间的桥。
(3)建立数据集DataSet。通过数据库与DataSet之间的桥SqlDataAdapter,编写代码用于填充数据集和更新数据集。
(4)在VB.NET程序窗体中添加控件并设置其属性,使其和DataSet对象中的表和属性列相关联。
5.C#的实例:简单得应用了一些ADO.NET的知识。
private static void ReadOrderData(string connectionString)
{
string queryString =
"SELECT OrderID, CustomerID FROM dbo.Orders;"; //查询字符串
using (SqlConnection connection = new SqlConnection(
connectionString)) //使用using语句保证在范围结尾连接自动关闭。
{
SqlCommand command = new SqlCommand(
queryString, connection); //创建Command对象
connection.Open();
SqlDataReader reader = command.ExecuteReader(); //采用Command对象的ExecuteReader方法创建DataReader对象。
try
{
while (reader.Read()) //调用了DataReader的read方法。
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
}
finally
{
// Always call Close when done reading.
reader.Close();
}
}
}
6.总结
以上这些都是我整理最近学习到ADO.NET的一些基础知识。理论是为了实践。在以后的学习过程中我会不断反复学习使用,以便更好的理解。