基于Ado.net数据库访问技术的研究与实现

时间:2022-07-19 07:12:58

基于Ado.net数据库访问技术的研究与实现

摘要:在B/S模式或C/S模式系统开发中,对象是前台页面(或窗体)与后台数据库之间的重要桥梁。通过对象的数据库访问技术,可以实现对数据库中数据的读取、插入、修改和删除等操作。首先介绍了组件的体系结构,其次分析了数据库访问技术的两种模式,最后针对这两种模式,通过实例实现了应用的数据库访问技术。

关键词:;B/S;C/S;数据库访问技术

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)12-2758-03

在数据库应用系统开发中,数据的操作占据了大量的工作,要操作的数据既可以是存储在数据库中的数据、又可以是存储在文件中的数据以及XML数据,其中对存储在数据库中的数据的操作最为普遍。技术是web页面或者Winform窗体与数据库之间进行数据交互的一种重要技术,它把对数据库的操作分为几个步骤,并为每个步骤提供对象来分装操作过程,从而使得对数据库中数据的操作变得简单易行。

1 组件体系结构

对Microsoft SQL Server数据库和XML等数据源提供一致的访问。我们可以使用来连接到这些数据源,并检索、处理和更新所包含的数据。

组件将数据访问与数据处理分离。它是通过两个主要的组件:.NET数据提供程序(Data Provider)和Dataset来完成这一操作的。图1说明了数据访问与数据处理分离的概念。体系结构的一个核心元素是.Net数据提供程序,它是专门为数据处理以及快速地只进、只读访问数据而设计的组件,包括Connection、Command、DataReader和DataAdapter对象的组件。[1]

taSet是体系结构中另一个核心组件,它是专门针对各种数据源的数据访问独立性而设计的,所以它可以用于多个不同的数据源。DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列,以及有关DataTable对象中数据的主键、外键、约束和关系信息组成。它相当于内存中的一个数据库,但从不关心它的数据是从数据库中、XML文件中还是其他什么数据源中获得。

2 访问数据库的两种模式

针对不同的数据源访问需求,为我们提供了两种连接数据库的方式:连接模式和断开模式。[2]

2.1 基于连接模式下数据库访问技术

对数据的读取和操作在断开数据库连接之前,这样的工作方式称为连接模式,使用DataReader对象来实现。DataReader从数据库中检索只读、只进的数据流。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到用户使用DataReader的Read方法对它们发出请求。使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且一次只在内存中存储一行,减少了系统开销。连接模式访问数据库数据原理如图2所示。

由于DataReader允许对数据库进行直接、高性能的访问,它只提供对数据的只读和只向前的访问,它返回的结果不会驻留在内存中,并且它一次只能访问一条记录,对服务器的内存要求较小,而且,只使用DataReader就可以显示数据。所以,只需要显示数据的应用程序,尽量使用DataReader,因为它将提供最佳的性能。

2.2 基于断开模式下数据库访问技术:

而对数据的读取在断开数据库连接之后,这样的工作方式称为断开模式,使用DataAdapter对象和DataSet对象配合实现。通过DataAdapter对象,向DataSet中填充数据。 DataAdapter对象充当数据库和DataSet之间的桥梁。能够用来保存和检索数据。DataAdapter对象的Fill方法用于将查询结果填充到DataSet中,以便能够实现离线处理数据。DataSet从数据源中获取数据以后就断开了与数据源之间的连接。允许在DataSet中进行增、删、改以及查等各种操作。当完成了各项操作以后还可以把DataSet中的数据送回到数据源。断开模式访问数据库数据原理如图3所示。

3 数据库访问技术的具体实现

3.1 数据库连接的实现

下面的代码通过 连接到本地 SQL Server 中的student 数据库。

public SqlConnection MyConnstring( )

{

string connstr = "Data Source=.;Initial Catalog=student;Integrated Security=True";

SqlConnection con = new SqlConnection(connstr);

return con;

}

3.2 从数据源中读取数据的实现

读取数据我们可以采用两种方法实现,一种是通过DataReader对象在连接模式下实现,另一种是通过DataAdapter对象和DataSet对象配合使用的离线模式下实现。

1)连接模式实现对数据库中数据的读取操作,代码如下:

private void SearchUserInfor_Click(object sender, EventArgs e)

{

MyConnstring().Open();

string SQL = "select UserName,UserPWD from users";

SqlCommand cmd = new SqlCommand(SQL, MyConnstring());

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

Console.WriteLine(“{0}\t{1}”,reader[0].ToString(),reader[1].ToString()) ;

}

reader.Close();

con.Close();

}

2)断开模式下实现对数据库中数据的读取操作,代码如下:

private void SearchUserInfor_Click(object sender, EventArgs e)

{

string SQL = "select * from users";

SqlDataAdapter da = new SqlDataAdapter(SQL,MyConnstring());

DataSet ds = new DataSet();

da.Fill(ds, "users");

for(int i=0;i

{

for(int j=0;j

{

Console.Write(ds.Tables[0]).Rows[i][j]+“\t”);

}

Console.Write(“\n”);

}

}

3.3 操作数据库中数据的实现

1)在连接模式下,主要使用Command对象通过执行SQL命令来操作数据库。下面通过实例来实现对数据库中数据的操作。代码如下:

Public void OperateUserInfor (string SQL)

{

MyConnstring().Open();

SqlCommand cmd = new SqlCommand(SQL, MyConnstring());

if (cmd.ExecuteNonQuery() > 0)

{

MessageBox.Show("操作成功!");

}

else

{

Return;

}

con.Close();

}

对于上面的代码,只要改变SQL语句就可以实现对数据库中数据的添加、删除以及修改等操作。

2)利用DataSet对象可以实现在断开模式下对数据库数据的添加、删除以及修改操作。当添加数据时,具体实现代码如下:

private void InsertUserInfor_Click(object sender, EventArgs e)

{

SqlCommand MySelectCmd=new SqlCommand("select * from users",MyConnstring());

SqlCommand MyInsertCmd=new SqlCommand("insert users values('"+UserName_TB .Text .Trim ()+"','"+UserPWD_TB.Text .Trim ()+"')",MyConnstring());

SqlDataAdapter MyAdapter=new SqlDataAdapter(); MyAdapter.SelectCommand=MySelectCmd ;

MyAdapter.InsertCommand=MyInsertCmd ;

DataSet MyDs=new DataSet();

MyAdapter.Fill(MyDs, "UserInfor"); (下转第2767页)

(上接第2760页)

DataRow Row=MyDs.Tables[0].NewRow();

Row["UserName"]="fashion";

Row["UserPWD"]="123";

MyDs.Tables[0].Rows.Add(Row);

MyAdapter.Update(MyDs, "UserInfor");

}

当要删除数据时,可以通过DataRow对象的Delete方法删除当前行。更新数据集和添加、删除数据的操作类似,首先获得DataSet的某个数据表的DataTable对象,然后再获得要更新数据的行对象DataRow,最后直接对DataRow对象进行修改,并更新数据库即可完成数据的修改工作。

4 结束语

应用程序访问数据库中的数据时,既可以使用DataReader对象从数据库中读取数据,又可以使用DataSet对象将数据放在本地内存中,但两者存在一定的差异。[3]

总之,两者各有优缺点,具体使用哪种对象需要具体问题具体分析。当数据量较少,不需要缓存数据时,可以使用DataReader;当数据来源于多个数据库,为减轻数据库服务器的负担,则可以考虑使用DataSet。

参考文献:

[1] 张联锋,陈文臣3.5程序设计与项目实践[M].北京:电子工业出版社,2011.

[2] 刘维岗.基于AS 的数据库访问技术研究与实现[J].信息时代,2012,2:50-53.

[3] 王晶晶.C#面向对象程序设计[M].北京:机械工业出版社,2010.

上一篇:爱的重量 第11期 下一篇:四川省农业科学院农产品加工研究所