【ADO.NET】——强大的数据库桥接

本文介绍了ADO.NET的基础概念及其在.NET编程环境中的作用。详细解释了ADO.NET中的关键组件,如Connection类、Command对象、DataReader对象、DataSet对象及DataAdapter对象等,并通过一个具体的登录验证示例展示了它们的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    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的用法远不止如此,还有很多我们还没用到的,值得我们去继续研究。


评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值