基于ADO.NET技术访问SQL Server数据库的编程实现
2014-09-27江凌杨平利杨梅袁媛
江凌+杨平利+杨梅+袁媛
摘要: SQL Server 是当前较为常用的数据库管理系统之一,具有速度快、功能强、易使用等特点,它主要解决数据的存储与管理问题。为了更好地实现对SQL Server数据库的访问,提出了新的数据库访问技术即ADO.NET。在此介绍了ADO.NET的核心组件和体系结构,阐述了利用ADO.NET访问数据库的2种不同方式,结合实例展示了利用ADO.NET访问SQL Server 2005的基本过程,并给出了关键代码,实现了对数据的有效管理。
关键词: ADO.NET; 数据库访问; SQL Server; 数据库管理
中图分类号: TN911⁃34; TP311文献标识码: A文章编号: 1004⁃373X(2014)08⁃0095⁃04
Programming of accessing SQL Server database based on ADO.NET
JIANG Ling, YANG Ping⁃li, Yang Mei, YUAN Yuan
(Northwest Institute of Nuclear Technology, Xian 710024, China)
Abstract:Being one of the most commonly⁃used database management systems, SQL Server has the characteristics of high speed, strong function and easy to use, and can solve the problems of data storage and management. In order to achieve a better way for accessing SQL Server, ADO.NET called as a new database access technology is proposed. The core components and the architecture of ADO.NET are simply introduced. Two different modes to access database using ADO.NET are explained. The basic process of using ADO.NET to access SQL Server is presented with an instance and the key codes are also given. The goal to efficiently manage data was achieved.
Keywords: ADO.NET; database access; SQL Server; database management
0引言
数据库技术是计算机科学技术中发展最快的领域之一,也是应用最广泛的技术之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。目前,数据库系统已经广泛应用于各个领域,例如管理信息系统、办公自动化系统、图书情报检索系统等。数据库系统的特点主要有以下几个方面[1]:
(1) 数据结构化。数据的共享性高,冗余度低,易扩充;
(2) 数据独立性高。数据由数据库管理系统(DBMS)统一管理和控制。
随着应用程序的发展演变,越来越多的应用程序需要通过网络传递数据。Microsoft结合.NET框架为数据访问提供全新的编程模型——ADO.NET。通过ADO.NET不仅能够使应用程序链接到数据源,检索、操纵和更新数据,而且能够实现对非关系数据库的访问。本文主要介绍在Visual C#.NET中如何利用ADO.NET进行数据访问,在数据库的选用上,采用了微软公司的SQL Server 2005。
1ADO.NET的体系结构
ADO.NET是.NET Framework提供给.NET开发人员的一组类,以目前业界认可与广泛使用的XML为基础,提供一致的方法来访问各种数据源和完善的数据访问服务,包括Microsoft SQL Server数据库、ODBC、OLE DB数据源、Oracle数据源以及XML等[2]。
ADO.NET是一种全新的、强大的数据库访问技术[3]。它可将系统前端的用户界面和后台数据库联系起来,应用程序可以通过ADO.NET来链接各种数据源,检索、插入、修改和删除数据源中的数据以及以快速、只读、只进的方式访问数据[4]。用户和系统之间一次典型的交互过程如图1所示。
与传统的访问Web数据库的方法相比较,ADO.NET数据访问技术具有2个突出的优点:一是紧密集成XML作为数据传输标准,使得ADO.NET能够更加灵活地访问各种不同类型的数据;二是采用中断式访问模式,应用程序只是在需要访问或者更新数据时才会链接到数据库,一旦完成后就立即断开,完成此任务的就是ADO.NET的2个核心组件。
图1 ADO.NET的数据访问过程
ADO.NET提供2个核心组件:.NET Framework数据提供程序和DataSet[5]。ADO.NET的体系结构如图2所示。.NET Framework数据提供程序用于链接数据源、执行SQL命令以及检索数据,检索到的数据既可以直接处理,也可以放入DataSet对象中。.NET Framework数据提供程序通过在DataAdapter对象和DataSet之间建立联系,使DataSet对象可以获取来自多个数据源的数据。数据集DataSet是一个与数据源无关的内存数据表示方法,用于高速缓存关系型数据。它像是一个简化的关系数据库,可以包含数据表、数据列和数据行,以及表与表之间的关系,并且完全是在脱机模式下进行操作。
图2 ADO.NET的体系结构
1.1NET Framework数据提供程序
.NET Framework数据提供程序包括Connection对象、Command对象、DataReader对象和DataAdapter对象。
(1) Connection对象:Connection管理与SQL Server数据库的链接,用于链接Microsoft SQL Server 7.0版或以上版本。Connection对象是通过ConnectionString属性的设置来链接数据库。
(2) Command对象:在ADO.NET中,一般使用Command对象来执行SQL命令并从数据源中返回结果。
(3) DataReader对象:用于从数据源中获取只读的、单项的数据流。
(4) DataAdapter对象:是DataSet和数据源之间的桥梁,它可以隐藏和Connection对象、Command对象沟通的细节,完成DataSet和数据源之间的数据交换。
1.2DataSet组件
(1) DataSet包含Tables(表)集合和Relations(关系)集合。Tables集合由DataTable对象组成,而Relations集合由DataRelation对象组成。
(2) 在DataSet的Tables集合中,每个DataTable对象又包含Rows(行)集合、Columns(列集合)集合、ChildRelations(子关系)集合和ParentRelations(父关系)集合。
因为DataSet的结构和关系型数据库类似,所以可以像访问关系型数据库那样访问DataSet。可以在DataSet内添加、删除表,在表中使用Select方法查看数据、使用Delete方法删除数据等。同时,DataSet可以看作由集合组成,因此还可以以集合的方法访问DataSet中的数据。另外,DataSet还能够完全看作XML格式的数据,对DataSet可以按照XML数据的形式进行访问。
对于不同的应用需要ADO.NET提供了2种模式来访问数据源中的数据:使用DataReader对象进行基于链接的访问和使用DataAdapter对象进行非链接的访问[6]。下面对2种访问模式进行分析和比较。
1.3基于链接的访问模式
基于链接的访问模式会占用一个数据库链接,然后读取数据。它是通过DataReader对象来实现的,DataReader对象在已经建立的数据链接的基础上,提供对数据源的单向的、只读的数据流。由于DataReader可以顺序地处理从数据源返回的结果,而且不在内存中缓存,因此DataReader适合从数据源中检索大量的、不需要进行更新操作的数据。
1.4非链接的访问模式
非链接的访问模式是以Dataset为中心的数据访问模式。Dataset中的数据是与数据库断开链接的[7]。一旦将结果存储在Dataset之后,Dataset和数据库之间便不再有链接。对Dataset内容所做的修改不会直接影响到数据库。它的优点就在于处理非链接数据时是不需要始终与数据库链接。
在Visual C#中利用ADO.NET访问SQL Server 2005的基本过程。
首先,使用SQL Server 2005建立一个数据库,假设该数据库名为yjsCheck。在使用ADO.NET之前,需要先把有关的命名空间导入进来[8]。即将下面的代码加入到要进行数据库操作的C#程序中,其具体位置应该在类声明之前。
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
1.5链接数据库
建立数据库链接是最基本的数据库操作任务之一,一般情况下可以使用ADO.NET的Connection对象来完成链接数据库的操作。下面的代码示例演示了使用SqlConnection对象如何创建和打开数据库链接。
SqlConnection sqlConn = new SqlConnection("Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI");
sqlConn.Open();
其中,“Data Source=abcSQLSERVER2005”为链接的数据源名称,“initial catalog=yjsCheck”为链接的数据库名称,“integrated security=SSPI”表示使用Windows集成安全身份认证。
链接数据库并完成了对数据库的操作之后,必须关闭与数据库的链接。可以使用Connection对象的Close()或Dispose()方法来完成。
1.6检索并显示数据
从数据库中检索数据记录一般使用下面的2种方式:一种是通过DataReader对象直接访问;另一种则是通过数据集DataSet和DataAdapter对象访问。
使用ADO.NET的DataReader对象能从数据库中检索数据。检索出来的数据形成一个只读只进的数据流。DataReader对象的Read方法可以前进到下一条记录。代码如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "select HostIP,Unit1 from Information ";
//查询Information表中的HostIP字段和Unit字段
SqlConnection sqlConn = new SqlConnection(myConn);
//使用Connection对象创建和数据库的链接
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
//创建SqlCommand对象并执行查询的SQL命令
sqlConn.Open();//打开链接
SqlDataReader myReader; //创建SqlDataReader对象
myReader = sqlComm.ExecuteReader();
while (myReader.Read())
//循环遍历SqlDataReader中的每条记录,直到完成
{
……对数据库操作代码
}
myReader.Close();//关闭SqlDataReader对象
sqlConn.Close(); //关闭链接
从数据库中读取记录的另一种方法是使用DataSet对象和DataAdapter对象。关键步骤如下:
(1) 创建数据库的链接;
(2) 构造包含查询语句的SqlDataAdapter对象;
(3) 调用Fill方法把数据填充到DataSet中;
(4) 关闭链接。
代码如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "select HostIP,Unit1 from Information ";
//查询Information表中的HostIP字段和Unit字段
SqlConnection sqlConn = new SqlConnection(myConn);
//使用Connection对象创建和数据库的链接
SqlDataAdapter myDataAdapter = new SqlDataAdapter(str, sqlConn);
//创建SqlDataAdapter对象
sqlConn.Open();
DataSet ds = new DataSet(); //创建DataSet对象
myDataAdapter.Fill(ds, "Information");
//SqlDataAdapter对象通过Fill方法把数据添加到DataSet中
{
……对数据库操作代码
}
sqlConn.Close();
当需要确定应用程序应使用DataReader还是应使用DataSet时,应考虑应用程序所需的功能类型。DataSet用于组合并关联来自多个源的数据,对数据执行大量的处理,而不需要与数据源保持打开的链接,从而将该链接释放给其他客户端使用。如果不需要DataSet所提供的功能,则可以使用DataReader以只进只读方式返回数据,从而提高应用程序的效率。
1.7添加和删除数据
(1) 添加操作
代码如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL语句的插入操作SqlConnection sqlConn = new SqlConnection(myConn);
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
sqlComm.Parameters.Add(new SqlParameter("@keywords",SqlDbType.NVarChar,100));
//使用SqlCommand对象的Parameters集合填充命令的值
sqlComm.Parameters["@keywords"].Value=textBox1.Text;
sqlComm.Parameters.Add(new SqlParameter("@degree",SqlDbType.Float));
sqlComm.Parameters["@degree"].Value=textBox2.Text;
sqlConn.Open();
try {
sqlComm.ExecuteNonQuery(); }
catch (SqlException ex)
{ MessageBox.Show("有误:" + ex.Message.ToString());
}//异常处理
sqlConn.Close();
(2) 删除操作
代码如下:
将添加操作中的语句:
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL语句的插入操作
改为:
string str = "delete from Information where Keywords=@keywords";//SQL语句的删除操作
其他语句相同。
2结语
ADO.NET为数据库的访问提供了一种全新的、简单高效的数据库访问技术[9],具有执行速度快,编程方式灵活等优点[10],功能强大,使用方便。它能够对绝大部分数据源进行高效的访问,是应用程序和数据库之间的一座重要桥梁,本文对从事数据库开发的技术人员有一定的借鉴作用。
参考文献
[1] 萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2002.
[2] 申朝阳,宋颜浩.ASP.NET与数据库技术高级指南[M].北京:中国水利水电出版社,2005.
[3] 张奇,李律松,卫建伟,等.Visual C#数据库项目案例导航[M].北京:清华大学出版社,2005.
[4] 路红武.基于.NET企业信息资源管理系统的设计与实现[J].计算机与现代化,2005,18(6):21⁃23.
[5] 李律松,陈少刚,沈刚,等.Visual C#数据库高级教程[M].北京:清华大学出版社,2005.
[6] 周晓娟.基于ADO.NET的数据库访问技术研究[J].现代商贸工业,2009(24):293⁃295.
[7] SCEPPA David.ADO.NET2.0技术内幕[M].北京:清华大学出版社,2007.
[8] ROBINSON Simon, NAGEL Christian.C#高级编程[M].李敏波,译.3版.北京:清华大学出版社,2005.
[9] 李成楠,杨晶.基于ADO.NET数据库访问技术浅析[J].科技创新导报,2012(12):33⁃35.
[10] 桑国珍.数据库访问技术的研究[J].现代电子技术,2010,33(20):83⁃85.
当需要确定应用程序应使用DataReader还是应使用DataSet时,应考虑应用程序所需的功能类型。DataSet用于组合并关联来自多个源的数据,对数据执行大量的处理,而不需要与数据源保持打开的链接,从而将该链接释放给其他客户端使用。如果不需要DataSet所提供的功能,则可以使用DataReader以只进只读方式返回数据,从而提高应用程序的效率。
1.7添加和删除数据
(1) 添加操作
代码如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL语句的插入操作SqlConnection sqlConn = new SqlConnection(myConn);
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
sqlComm.Parameters.Add(new SqlParameter("@keywords",SqlDbType.NVarChar,100));
//使用SqlCommand对象的Parameters集合填充命令的值
sqlComm.Parameters["@keywords"].Value=textBox1.Text;
sqlComm.Parameters.Add(new SqlParameter("@degree",SqlDbType.Float));
sqlComm.Parameters["@degree"].Value=textBox2.Text;
sqlConn.Open();
try {
sqlComm.ExecuteNonQuery(); }
catch (SqlException ex)
{ MessageBox.Show("有误:" + ex.Message.ToString());
}//异常处理
sqlConn.Close();
(2) 删除操作
代码如下:
将添加操作中的语句:
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL语句的插入操作
改为:
string str = "delete from Information where Keywords=@keywords";//SQL语句的删除操作
其他语句相同。
2结语
ADO.NET为数据库的访问提供了一种全新的、简单高效的数据库访问技术[9],具有执行速度快,编程方式灵活等优点[10],功能强大,使用方便。它能够对绝大部分数据源进行高效的访问,是应用程序和数据库之间的一座重要桥梁,本文对从事数据库开发的技术人员有一定的借鉴作用。
参考文献
[1] 萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2002.
[2] 申朝阳,宋颜浩.ASP.NET与数据库技术高级指南[M].北京:中国水利水电出版社,2005.
[3] 张奇,李律松,卫建伟,等.Visual C#数据库项目案例导航[M].北京:清华大学出版社,2005.
[4] 路红武.基于.NET企业信息资源管理系统的设计与实现[J].计算机与现代化,2005,18(6):21⁃23.
[5] 李律松,陈少刚,沈刚,等.Visual C#数据库高级教程[M].北京:清华大学出版社,2005.
[6] 周晓娟.基于ADO.NET的数据库访问技术研究[J].现代商贸工业,2009(24):293⁃295.
[7] SCEPPA David.ADO.NET2.0技术内幕[M].北京:清华大学出版社,2007.
[8] ROBINSON Simon, NAGEL Christian.C#高级编程[M].李敏波,译.3版.北京:清华大学出版社,2005.
[9] 李成楠,杨晶.基于ADO.NET数据库访问技术浅析[J].科技创新导报,2012(12):33⁃35.
[10] 桑国珍.数据库访问技术的研究[J].现代电子技术,2010,33(20):83⁃85.
当需要确定应用程序应使用DataReader还是应使用DataSet时,应考虑应用程序所需的功能类型。DataSet用于组合并关联来自多个源的数据,对数据执行大量的处理,而不需要与数据源保持打开的链接,从而将该链接释放给其他客户端使用。如果不需要DataSet所提供的功能,则可以使用DataReader以只进只读方式返回数据,从而提高应用程序的效率。
1.7添加和删除数据
(1) 添加操作
代码如下:
string myConn = "Data Source=abcSQLSERVER2005;initial catalog=yjsCheck;integrated security=SSPI";
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL语句的插入操作SqlConnection sqlConn = new SqlConnection(myConn);
SqlCommand sqlComm = new SqlCommand(str, sqlConn);
sqlComm.Parameters.Add(new SqlParameter("@keywords",SqlDbType.NVarChar,100));
//使用SqlCommand对象的Parameters集合填充命令的值
sqlComm.Parameters["@keywords"].Value=textBox1.Text;
sqlComm.Parameters.Add(new SqlParameter("@degree",SqlDbType.Float));
sqlComm.Parameters["@degree"].Value=textBox2.Text;
sqlConn.Open();
try {
sqlComm.ExecuteNonQuery(); }
catch (SqlException ex)
{ MessageBox.Show("有误:" + ex.Message.ToString());
}//异常处理
sqlConn.Close();
(2) 删除操作
代码如下:
将添加操作中的语句:
string str = "insert into Information(Keywords,Degree) values (@keywords,@degree)";//SQL语句的插入操作
改为:
string str = "delete from Information where Keywords=@keywords";//SQL语句的删除操作
其他语句相同。
2结语
ADO.NET为数据库的访问提供了一种全新的、简单高效的数据库访问技术[9],具有执行速度快,编程方式灵活等优点[10],功能强大,使用方便。它能够对绝大部分数据源进行高效的访问,是应用程序和数据库之间的一座重要桥梁,本文对从事数据库开发的技术人员有一定的借鉴作用。
参考文献
[1] 萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2002.
[2] 申朝阳,宋颜浩.ASP.NET与数据库技术高级指南[M].北京:中国水利水电出版社,2005.
[3] 张奇,李律松,卫建伟,等.Visual C#数据库项目案例导航[M].北京:清华大学出版社,2005.
[4] 路红武.基于.NET企业信息资源管理系统的设计与实现[J].计算机与现代化,2005,18(6):21⁃23.
[5] 李律松,陈少刚,沈刚,等.Visual C#数据库高级教程[M].北京:清华大学出版社,2005.
[6] 周晓娟.基于ADO.NET的数据库访问技术研究[J].现代商贸工业,2009(24):293⁃295.
[7] SCEPPA David.ADO.NET2.0技术内幕[M].北京:清华大学出版社,2007.
[8] ROBINSON Simon, NAGEL Christian.C#高级编程[M].李敏波,译.3版.北京:清华大学出版社,2005.
[9] 李成楠,杨晶.基于ADO.NET数据库访问技术浅析[J].科技创新导报,2012(12):33⁃35.
[10] 桑国珍.数据库访问技术的研究[J].现代电子技术,2010,33(20):83⁃85.