ADO.NET名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在遗忘的Microsoft技术中访问数据。之所以使用这个名称,是因为Microsoft希望表明,这是在NET编程环境中优先使用的数据访问接口。说白了,ADO.NET及时一个类库,里面包含很多对象和类,用来实现程序访问数据库的功能。
ADO.NET类库位于System.Data.dll中,所以在使用时要引入命名空间,以SQL Server数据库为例,
<span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; //必须引入
using System.Data.SqlClient; //必须引入</span>
Connection类
和数据库交互,就必须要连接这个类,因为它提供数据库服务器、数据库名字、用户名和密码,以及连接数据库所需要的其他参数。
连接字符串的基本语法:数据源(Data Source)+ 数据库名称(Initial Catalog)+ 用户名(User ID)+ 密码(Password),当然连接字符串中还有其他的可用选项,比如应用程序的名称、连接生存时间、是否加密等等,这里不再细说。以SQL为例,常用的连接字符串是
<span style="font-family:KaiTi_GB2312;font-size:18px;">Data Source=myServerAddress;Initial Catalog=myDataBase;UserId=myUsername;Password=myPassword
Server=myServerAddress;Database=myDataBase;UserId=myUsername;Password=myPassword。</span>
Command对象
与数据库建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令;Command对象常用的方法有ExecuteReader()、ExecuteScalar()、ExecuteNonQuery(),向一个表中插入数据就可以用ExecuteNonQuery()方法执行,看个小例子
<span style="font-family:KaiTi_GB2312;font-size:18px;">//查询数据库信息
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT ID, UserName, Password, Email FROM USERS WHERE UserName=@UserName AND Password=@Password";
cmd.CommandType = CommandType.Text;</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">//向数据库中插入信息
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"INSERT INTO SCORES(UserName,Score) Values(@UserName,@Score)";
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Score", value));
//打开数据库
conn.Open();
cmd.ExecuteNonQuery();</span>
Data Reader对象
如果开发人员要读取数据库中的一串数据时,就可以使用Data Reader对象,因为Data Reader对象可以返回单向的数据流,而且速度比较快,开发人员只需要按照一定的顺序从数据流中取出数据,但是如果开发人员需要对数据进行操作,那么就应该使用另外一个ADO对象,就是Data Set。
Data Set对象
Data Set对象类似于VB连接数据库时的RecordSet,但是二者又有很多不同的地方,相比较下,Data Set更有优势。Data Set可以看做是ADO.NET的核心,也称作是内存中的数据库,它是临时存储在内存中的数据库表的集合,并不依赖与数据库,也就是说即使断了与数据库的连接,Data Set同样可以进行数据操作。Data Set和数据库与程序的关系如下图:
Data Adapter对象
它是Data Set和数据源之间查询和存储的桥梁,它的功能的实现主要是通过Command对象来实现的,比如InsertCommand、UpdateCommand等。它的主要功能是将数据源中读取的信息填充到Data Set中,或者将进行数据操作后的Data Set更新到数据源中,这就涉及到了它的两个方法,Fill()方法和Update()方法。
Data Table类
Data Table是临时储存数据的网络虚拟表,也就是存储于内存中的数据表,应用于Data Set和Data View。Data Set是一个虚拟的数据库,那么这个数据库中的数据库表就是Data Table,在Data Set中可以有一个Data Table,也可以有多张Data Table表,同样对这些Data Table表可以进行对一般的数据表一样的增删改查操作。
下面是一个简单的Demo中用到ADO.NET的部分
<span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; //必须引入
using System.Data.SqlClient; //必须引入
namespace Login.DAL
{
//连接USERS数据库表,并读取其中的信息
public class UserDAO
{
public Login .Model .UserInfo SelectUser(string userName, string password)
{
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString)) //SqlConnection
{
//查询信息
SqlCommand cmd = conn.CreateCommand(); //SqlCommand
cmd.CommandText = @"SELECT ID, UserName, Password, Email FROM USERS WHERE UserName=@UserName AND Password=@Password";
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@UserName", userName)); //SqlParameter
cmd.Parameters.Add(new SqlParameter("@Password", password));
//打开数据库,读取数据库内容
conn.Open();
SqlDataReader reader = cmd.ExecuteReader(); //SqlDataReader
//将数据库内容赋给user
Login.Model.UserInfo user = null;
while (reader.Read())
{
if (user == null)
{
user = new Login.Model.UserInfo();
}
user.ID = reader.GetInt32(0);
user.UserName = reader.GetString(1);
user.Password = reader.GetString(2);
if (!reader.IsDBNull(3))
{
user.Email = reader.GetString(3);
}
}
return user;
}
}
}
}
</span>
【总结】
ADO.NET类库中的类就可以看做是基类,是别人已经封装好的,用来实现某些特定功能的类,我们用的时候就可以直接拿来用,就不用自己再写。这样就提高了大大减少了一个程序的代码量,可谓是人性化的设计。ADO.NET的用法远不止如此,还有很多我们还没用到的,值得我们去继续研究。