Csharp与数据库访问技术

更新时间:2023-12-07 00:09:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Csharp c# 数据库

2.1 ADO.NET概述 .......................................................................................................................... 2

2.1.1 ADO.NET体系结构 ....................................................................................................... 2 2.1.2 ADO.NET对象模型 .................................................................................................... 3 2.2 Connection 对象与数据库连接 ................................................................................................ 4

2.2.1 Connection对象的常用属性 ....................................................................................... 4 2.2.2 Connection对象的连接字符串 ................................................................................... 5 2.2.3 Connection对象的常用方法 ....................................................................................... 7 2.3 Command(数据命令)对象与查询语句 ................................................................................... 11

2.3.1 Command对象的常用属性 ....................................................................................... 11 2.3.2 Command对象的常用方法 ....................................................................................... 12 2.3.3 Command对象创建SQl语句代码示例 ................................................................... 16 综合示例 ................................................................................................................................ 18 4.4.2 实例演示DataReader ................................................................................................. 32 2.4 DataReader对象与数据获取 ................................................................................................... 35

2.4.1 DataReader对象的常用属性 ..................................................................................... 35 2.4.2 DataReader对象的常用方法 ........................................................................................ 35 2.4.3 DataReader对象访问数据库代码示例 ..................................................................... 36 2.5 DataAdaDter对象 ................................................................................................................. 38

2.5.1 DataAdapter对象的常用属性 ................................................................................... 38 2.5.2 DataAdapter对象的常用方法 ................................................................................... 39 2.5.3 DataAdapter对象代码示例 ....................................................................................... 40 2.6 DataSet对象 ............................................................................................................................. 42

2.6.1 DataSet对象概述 .......................................................................................................... 42 2.6.2 DataSet对象模型 ....................................................................................................... 42 2.6.3 DataCOIumn和DataRow对象 ................................................................................. 44 2.6.4 使用DataSet对象访问数据库 .................................................................................. 47 2.7 ADO.NET 代码综合示例 ....................................................................................................... 48

2.7.1 使用OLE DB.NET Provider ................................................................................... 48 2.7.2 使用SQL Server .NET Provider ............................................................................... 49 2.7.3 数据库访问综述 ......................................................................................................... 50 2.8 DataGrid控件与数据库访问技术 ........................................................................................... 50

2.8.1 DataGrid控件与数据绑定 ......................................................................................... 50 2.8.2 DataGrid代码示例 ..................................................................................................... 50 2.9 本章小结 ............................................................................................................................... 52

C#与数据库访问技术

ADO.NET(ActiveX Data Object.NET)是Microsoft公司开发的用于数据库连接的一套组件模型,是ADO的升级版本。

由于ADO.NET组件模型很好地融入了.NET Framework,所以拥有.NET Framework的平台无关、高效等特性。程序员能使用ADO.NET组件模型,方便高效地连接和访问数据库。

1 ADO.NET概述

ADO.NET是与数据库访问操作有关的对象模型的集合,它基于Microsoft的.NET Framework,在很大程度上封装了数据库访问和数据操作的动作。

ADO.NET同其前身ADO系列访问数据库的组件相比,做了以下两点重要改进: ?ADO.NET引入了离线的数据结果集(Disconnected DataSet)这个概念,通过使用离线的数据结果集,程序员更可以在数据库断开的情况下访问数据库。 ?ADO.NET还提供了对XML格式文档的支持,所以通过ADO.NET组件可以方便地在异构环境的项目间读取和交换数据。

1.1 ADO.NET体系结构

ADO.NET组件的表现形式是.NET的类库,它拥有两个核心组件:.NET Data Provider(数据提供者)和DataSet(数据结果集)对象。

.NET Data Provider是专门为数据处理以及快速地只进、只读访问数据而设计的组件,包括Connection、Command、DataReader和DataAdapter四大类对象,其主要功能是: ? 在应用程序里连接数据源,连接SQL Server数据库服务器。

? 通过SQL语句的形式执行数据库操作,并能以多种形式把查询到的结果集填充到DataSet里。

DataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。DataSet是数据的内存驻留表示形式,无论数据源是什么,它都会提供一致的关系编程模型。它是专门为独立于任何数据源的数据访问而设计的。 DataSet对象的主要功能是:

? 用其中的DataTable和DataRelations对象来容纳.NET Data Provider对象传递过来的数据库访问结果集,以便应用程序访问。

(2)把应用代码里的业务执行结果更新到数据库中。

并且,DataSet对象能在离线的情况下管理存储数据,这在海量数据访问控制的场合是非常有利的。

图2-1描述了ADO.NET组件的体系结构。

图2-1 ADO.NET体系结构

1.2 ADO.NET对象模型

ADO.NET对象模型中有5个主要的数据库访问和操作对象,分别是Connection、Command、DataReader、DataAdapter和DataSet对象。

其中,Connection对象主要负责连接数据库,Command对象主要负责生成并执行SQL语句,DataReader对象主要负责读取数据库中的数据,DataAdapter对象主要负责在Command对象执行完SQL语句后生成并填充DataSet和DataTable,而DataSet对象主要负责存取和更新数据。

ADO.NET主要提供了两种数据提供者(Data Provider),分别是SQL Server.NET Provider和OLE DB.NET Provider。

SQL Server.NET Framework数据提供程序使用它自身的协议与SQL Server数据库服务器通信,而OLEDB.NET Framework则通过OLE DB服务组件(提供连接池和事务服务)和数据源的OLE DB提供程序与OLE DB数据源进行通信。

它们两者内部均有Connection、Command、DataReader和DataAdapter 4类对象。对于不同的数据提供者,上述4种对象的类名是不同的,而它们连接访问数据库的过程却大同小异。 这是因为它们以接口的形式,封装了不同数据库的连接访问动作。正是由于这两种数据提供者使用数据库访问驱动程序屏蔽了底层数据库的差异,所以从用户的角度来看,它们的差别仅仅体现在命名上。

表2-1描述了这两类数据提供者下的对象命名。 表2-1 ADO.NET对象描述

对象名 Connection对象 Command对象 DataReader对象 DataAdapter对象 OLE DB数据提供者的类名 OleDbConnection OleDbCommand OleDbDataReader OleDbDataAdapter SQL Server数据提供者类名 SqlConnection SqlCommand SqlDataReader SqlDataAdapter 2.2 Connection 对象与数据库连接

在不同的Provider类型下,Connection对象的命名也是不同的,但它们有一个共同的功能,那就是管理与数据源的连接。

2.2.1 Connection对象的常用属性

Connectionion对象主要用于连接数据库,它的常用的属性如下。

? ConnectionString属性:该属性用来获取或设置用于打开SQL Server

数据库的字符串。

?ConnectionTimeout属性:该属性用来获取在尝试建立连接时终止尝试,

并生成错误之前所等待的时间。

?DataBase属性:该属性用来获取当前数据库或连接打开后要使用的数据库

的名称。

?DataSource属性:该属性用来设置要连接的数据源实例名称,

例如SQLServer的Local服务实例。

? State性该属性:是一个枚举类型的值,用来表示同当前数据库的 连接状态。该属性的取值情况和含义如表2-2所示。 表2-2 Provider值描述(ConnectionSate枚举成员值) 属 性 值 Broken 对应含义 该连接对象与数据源的连接处于中断状态。只有当连接打开后再与数据库失去连接才会导致这种情况。可以关闭处于这种状态的连接,然后重新打开(该值是为此产品的未来版本保留的) 该连接处于关闭状态 该连接对象正在与数据源连接(该值是为此产品的未来版本保留的) 该连接对象正在执行数据库操作的命令 该连接对象正在检索数据 该连接处于打开状态 Closed Connecting Executing Fetching Open State属性一般是只读不写的,以下代码演示了使用State属性管理控制数据连接的方式。 //设置连接对象 SqlConnection conn;

//如果是空闲状态,连接数据库

if(conn.State == ConnectionState.Closed) {

conn.Open();

}

//访问数据库的代码

??

//最后关闭连接

if(conn.State == ConnectionState.Open) {

conn.Close(); }

2.2.2 Connection对象的连接字符串

在ConnectionString连接字符串里,一般需要指定将要连接数据源的种类、 数据库服务器的名称、数据库名称、登录用户名、密码、等待连接时间、 安全验证设置等参数信息,这些参数之间用分号隔开。下面将详细描述 这些常用参数的使用方法。

1. Provider参数

Provider参数用来指定要连接数据源的种类。如果使用的是SQL Server Datahovider,则不需要指定Provider参数,因为SQL Server DataProvider已经 指定了所要连接的数据源是SQl Server服务器。如果使用的是O1eDB Data Provider或其他连接数据库,则必须指定Provider参数。表2-3说明了Provider参数值和连接数据源类型之间的关系。

表2-3 Provider值描述 Provider值 SQL OLE DB MSDASQL Microsoft. Jet. OLEDB.4.0 MSDAORA 对应连接的数据源 Microsoft OLEDB Provider for SQL Server Microsoft OLEDB Provider for ODBC Microsoft OLEDB Provider for Access Microsoft OLEDB Provider for Oracle 2.Server参数

Server参数用来指定需要连接的数据库服务器(或数据域)。比如

Server=(local),指定连接的数据库服务器是在本地。如果本地的数据库 还定义了实例名,Server参数可以写成Server=(local)\\实例名。 另外,可以使用计算机名作为服务器的值。

如果连接的是远端的数据库服务器,Server参数可以写成Server=IP或 “Server=远程计算机名”的形式。

Server参数也可以写成Data Source,比如Data Source=IP。 server=(local);Initial Catalog=student;user Id=sa; password= ;

Data Source=(localhost);Initial Catalog=student;user Id=sa; password= ;

da.Fill(ds, \

上述代码使用DataApater对象填充DataSet对象的步骤如下。

(1)根据连接字符串和SQL语句,创建一个SqlDataAdapter对象。这里,虽然没有出现Connection和Command对象的控制语句,但是SqlDataAdapter对象会在创建的时候, 自动构造对应的SqlConnection和SqlCommand对象,同时根据连接字符串自动初始化连接。要注意的是,此时SqlConnection和SqlCommand对象都处于关闭状态。 (2)创建DataSet对象,该对象需要用DataAdapter填充。 (3)调用DataAdapter的Fill方法,通过DataTable填充DataSet对象。由于跟随DataAdapter对象创建的Command里的SQL语句是访问数据库里的USER表,所以在调用Fill方法的时候,在打开对应的SqlConnection和SqlCommand对象后,会用USER表的数据填充创建一个名为USER的DataTable对象,再用该DataTable填充到DataSet中。

下面的代码演示了如何使用DataAdapter对象将DataSet中的数据更新到数据库。 private static string strConnect=\

uid=sa;pwd=aspent;database=LOGINDB\

string sqlstr=\//利用构造函数,创建DataAdapter

SqlDataAdapter da=new SqlDataAdapter(sqlstr, strConnect); // 创建DataSet

DataSet ds=new DataSet();

//填充,第一个参数是要填充的dataset对象,第二个参数是填充dataset的datatabble da.Fill(ds, \

//以下代码将更新DataSet里的数据

//在DataSet里的名为\的DataTable里添加一个用于描述行记录的DataRow对象 DataRow dr=ds.Tables[\//通过DataRow对象添加一条记录 dr[\

dr[\

ds.Tables[\ //更新到数据库里

SqlCommandBuilder scb=new SqlCommandBuilder(da); da.update(ds, \

在上述代码里,首先使用DataAdapter填充DataSet对象,然后通过DataRow对象,向DataSet添加一条记录,最后使用DataSet的update方法将添加的记录提交到数据库中。执行完update语句,数据库USER中就多了一条USERID是ID2、USERNAME是TOM的记录。

此外,上述代码出现的SqlCommandBuilder对象用来对数据表进行操作。用了这个对象,就不必再繁琐地使用DataAdapter的UpdataCommand属性来执行更新操作。

2.6 DataSet对象

DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库。并且,由于DataSet对象具有离线访问数据库的特性,所以它更能用来接收海量的数据信息。

2.6.1 DataSet对象概述

DataSet是ADO.NET中用来访问数据库的对象。由于其在访问数据库前不知道数据库里表的结构,所以在其内部,用动态XML的格式来存放数据。这种设计使DataSet能访问不同数据源的数据。

DataSet对象本身不同数据库发生关系,而是通过DataAdapter对象从数据库里获取数据并把修改后的数据更新到数据库。在DataAdapter的讲述里,就已经可以看出,在同数据库建立连接后,程序员可以通过DataApater对象填充(Fill)或更新(Update)DataSet对象。

.NET的这种设计,很好地符合了面向对象思想里低耦合、对象功能唯一的优势。如果让DataSet对象能直接连到数据库,那么DataSet对象的设计势必只能是针对特定数据库,通用性就非常差,这样对DataSet的动态扩展非常不利。

由于DataSet独立于数据源,DataSet可以包含应用程序本地的数据,也可以包含来自多个数据源的数据。与现有数据源的交互通过DataAdapter来控制。

DataSet对象常和DataAdapter对象配合使用。通过DataAdapter对象,向DataSet中填充数据的一般过程是:

(1)创建DataAdapter和DataSet对象。

(2)使用DataAdapter对象,为DataSet产生一个或多个DataTable对象。

(3)DataAdapter对象将从数据源中取出的数据填充到DataTable中的DataRow对象里,然后将该DataRow对象追加到DataTable对象的Rows集合中。

(4)重复第(2)步,直到数据源中所有数据都已填充到DataTable里。 (5)将第(2)步产生的DataTable对象加入DataSet里。

而使用DataSet,将程序里修改后的数据更新到数据源的过程是: (1)创建待操作DataSet对象的副本,以免因误操作而造成数据损坏。

(2)对DataSet的数据行(如DataTable里的DataRow对象)进行插入、删除或更改操作,此时的操作不能影响到数据库中。

(3)调用DataAdapter的Update方法,把DataSet中修改的数据更新到数据源中。

2.6.2 DataSet对象模型

从前面的讲述中可以看出,DataSet对象主要用来存储从数据库得到的数据结果集。为了更好地对应数据库里数据表和表之间的联系,DataSet对象包含了DataTable和DataRelation类型的对象。

其中,DataTable用来存储一张表里的数据,其中的DataRows对象就用来表示表的字段结构以及表里的一条数据。另外,DataTable中的DataView对象用来产生和对应数据视图。而DataRelation类型的对象则用来存储DataTable之间的约束关系。DataTable和DataRelation对象都可以用对象的集合(Collection)对象类管理。

由此可以看出,DataSet中的方法和对象与关系数据库模型中的方法和对象一致,DataSet对象可以看作是数据库在应用代码里的映射,通过对DataSet对象的访问,可以完成对实际数据库的操作。DataSet的对象模型如图2-2所示。

图2-2 DataSet对象模型

DataSet对象模型中的各重要组件说明如下。

1.DataRelationCollection和DataRelation

DataRelation对象用来描述DataSet里各表之间的诸如主键和外键的关系,它使一个DataTable中的行与另一个DataTable中的行相关联,也可以标识DataSet中两个表的匹配列。 DataRelationCollection是DataRelation对象的集合,用于描述整个DataSet对象里数据表之间的关系。

2.ExtendedProperties

DataSet、DataTable和DataColumn全部具有ExtendedProperties属性。可以在其中加入自定义信息,例如用于生成结果集的SQL语句或生成数据的时间。

3.DataTableCollection和DataTable

在DataSet里,用DataTable对象来映射数据库里的表,而DataTableCollection用来管理DataSet下的所有DatabTable。

DataTable具有以下常用属性。

(1)TableName:用来获取或设置DataTable的名称。 (2)DataSet:用来表示该DataTable从属于哪个DataSet。

(3)Rows:用来表示该DataTable的DataRow对象的集合,也就是对应着相应数据表里的所用记录。程序员能通过此属性,依次访问DataTable里的每条记录。该属性有如下方法。 ? Add:把DataTable的AddRow方法创建的行追加到末尾。

? InsertAt:把DataTable的AddRow方法创建的行追加到索引号指定的位置。 ? Remove:删除指定的DataRow对象,并从物理上把数据源里的对应数据删除。 ? RemoveAt:根据索引号,直接删除数据。

(4)Columns:用来表示该DataTable的DataColumn对象的集合,通过此属性,能依次访问DataTable里的每个字段。

DataTable具有以下常用方法。

? DataRow NewRow()方法:该方法用来为当前的DataTable增加一个新行,返回表示行记录的DataRow对象,但该方法不会把创建好的DataRow添加到DataRows集合中,而是需要通过调用DataTable对象Rows属性的Add方法,才能完成添加动作。

? DataRow [] Select()方法:该方法执行后,会返回一个DataRow对象组成的数组。

? void Merge(DataTabletable)方法:该方法能把参数中的DataTable和本DataTable合并。 ? void Load(1DataReaderreader)方法:该方法通过参数里的IdataReader对象,把对应数据源里的数据装载到DataTable里,以便后继操作。

? void Clear()方法:该方法用来清除DataTable里的数据,通常在获取数据前调用。 ? void Reset()方法:该方法用宋重置DataTabl对象。

2.6.3 DataCOIumn和DataRow对象

在DataTable里,用DataColumn对象来描述对应数据表的字段,用DataRow对象来描述对应数据库的记录。

值得注意的是,DataTable对象一般不对表的结构进行修改,所以一般只通过Column对象读列。例如,通过DataTable.Table[”TableName\来获取列名。 DataColumn对象的常用属性如下。

? Caption属性:用来获取和设置列的标题。

? ColumnName属性:用来描述该DataColumn在DataColumnCollection中的名字。 ? DataType属性:用来描述存储在该列中数据的类型。

在DataTable里,用DataRow对象来描述对应数据库的记录。

DataRow对象和DataTable里的Rows属性相似,都用来描述DataTable里的记录。同ADO版本中的同类对象不同的是,ADO.NET下的DataRow有“原始数据”和“已经更新的数据”之分,并且,DataRow中的修改后的数据是不能即时体现到数据库中的,只有调用DataSet的Update方法,才能更新数据。

DataRow对象的重要属性有RowState属性,用来表示该DataRow是否被修改和修改方式。RowState属性可以取的值有Added、Deleted、Modified或Unchanged。 而DataRow对象有以下重要方法。 ? void AcceptChanges()方法:该方法用来向数据库提交上次执行AcceptChanges方法后对该行的所有修改。

? void Delete()方法:该方法用来删除当前的DataRow对象。

? 设置当前DataRow对象的RowState属性的方法:此类方法有: void SetAdded( ) ; void SetModified();

分别用来把DataRow对象设置成Added和Modified。 ? void AcceptChanges()方法:该方法用来向数据库提交上次执行AcceptChanges方法后对该行的所有修改。

? void BeginEdit()方法:该方法用来对DataRow对象开始编辑操作。

? void cancelEdit()方法:该方法用来取消对当前DataRow对象的编辑操作。 ? void EndEdit()方法:该方法用来终止对当前DataRow对象的编辑操作。

下面的代码讲述了如何综合地使用DataTable、DataColumn和DataRow对象进行数据库操作。

private void DemonstrateRowBeginEdit( ) {

//创建DataTable对象

DataTable table=new DataTable(\

//创建DataColumn对象,并设置其属性为Int32类型

DataColumn column=new DataColumn(\// 添加Column到dataTable中 table.Columns.Add(column);

//使用for循环,创建5个DataRow对象并添加到DataTable中 DataRow newRow; for(int i=0; i<5; i++) {

// RowChanged event will occur for every addition newRow=table.NewRow(); newRow[0]=i;

table.Rows.Add(newRow); }

//使用dataTable的AcceptChanges方法,将更改提交到数据库中 table.AcceptChanges();

//开始操作DataRow中的每个对象 foreach(DataRow row in table.Rows) {

//使用BeginEdit方法开始操作 row.BeginEdit();

row[0]=(int) row[0]+10; }

本文来源:https://www.bwwdw.com/article/wmgt.html

Top