ADO.NET的设计目标
ADO.NET是Microsoft公司发布的新一代数据存取技术,是一个全新的数据库访问模型,使应用程序的开发人员能方便的访问不同的数据源
ADO.NET提供对SQL Server等数据源以及通过OLEDB和XML公开的数据源的一致访问。数据共享应用程序可以使用ADO.NET来连接到这些数据源,并检索、操作和更新数据
设计目标:
n 支持断开式多层编程模式
n 能够与XML紧密集成
n 具有能够组合来自多个、不同数据源的数据通用数据表示形式
n 具有为与数据库交互而优化的功能
ADO.NET体系结构:
ADO.NET的两个核心组件:(1)DataSet (2)数据提供程序(DataProvider:包括Connection、Command、DataReader、DataAdapter)
DataSet
u DataSet 是ADO.NET的断开式结构的核心组件
u 设计目的:为了实现独立于任何数据源的数据访问
u 可以用于多种不同的数据源,用于XML数据,或用于应用程序本地数据
u DataSet包含一个或多个DataTable对象集合
数据提供程序(DataProvider)
设计目标:为了实现数据操作和对数据快速、只进、只读访问
.NET框架提供了4个数据提供程序
1. SQL Server数据提供程序
2. OLE DB数据提供程序
3. ODBC数据提供程序
4. Oracle数据提供程序
DataProvider的四个对象
a) Connection对象:提供与数据源的连接
b) Command对象:使用户能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。
c) DataReader对象:从数据源中提供高性能的数据流,读取数据
d) DataAdapter对象:提供连接DataSet对象和数据源的桥梁
DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致
数据库连接
要访问数据库,首先必须建立与数据库的连接
使用Connection对象创建和管理连接:
连接字符串
在建立连接时,通常要提供一些数据源的信息,如数据库的名称、数据库所在物理位置、用户账号、密码等等(和一般连接数据库吗没什么区别)
通过Connection对象的ConnectionString属性来设置
打开和关闭连接
连接的两个主要方法是Open和Close
Open方法
使用ConnectionString属性中的信息联系数据源并建立一个打开的连接
Close方法
关闭连接,是非常必要的。因为大多数据源只支持有限书目的打开的连接,并且打开的连接占用宝贵的系统资源
如果正在使用DataProvider或Command,则不必显示打开和关闭连接。因为当调用这些对象的某个方法(例如DataAdapter的Fill或Update方法)时,该方法将检查连接是否已经打开,如果没有,适配器将打开连接,执行其逻辑,然后再关闭连接。
Command对象
在用Connection对象成功连接数据库后,可以用command对象对数据进行操作,如对数据进行增、删、查、改等操作
Command对象表示要对数据源执行的一个SQL语句或存储过程
DataAdapter对象
DataAdapter(数据适配器)用来建立和初始化数据表,并将其填入DataSet对象,在内存中存储数据。
DataAdapter的主要方法是Fill,用来将来自DataAdapter中的数据填入DataSet中
DataSet
DataSet对象是一个存储在内存中的离线数据库,它并未与数据库建立及时的连接
DataSet对象专门用来存储从数据源中读出的数据,无论是SQL Server数据库还是Access数据库,在DataSet中存储方式都是一致的,用户无法从DataSet中判断读取的数据库类型
DataReader对象
如果不需要DataSet所提供的功能,则可以使用DataReader以只读方式返回数据
因为节省了DataSet所使用的内存,并省去了创建DataSet并填充其内容所需要的必要处理,所以可以提高应用程序的性能。
C#代码示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; using System.Text.RegularExpressions; using System.Windows.Forms; namespace 图书管理1 { class BaseOperate { //建立数据库连接 public SqlConnection getcon() { string str_sqlcon = "data source=.;database=library_sys;uid=sa;pwd=123456"; try { SqlConnection myCon = new SqlConnection(str_sqlcon); return myCon; } catch (Exception ex) { MessageBox.Show("出错了","链接出错",MessageBoxButtons.OK); throw ex; } } //执行sqlcommand命令,但无返回值 public void getcom(string sqlstring) { SqlConnection sqlcon = this.getcon(); sqlcon.Open(); SqlCommand sqlcom = new SqlCommand(sqlstring, sqlcon); sqlcom.ExecuteNonQuery(); sqlcom.Dispose(); sqlcon.Close(); sqlcon.Dispose(); } //执行sql语句并返回一个dataset数据集对象 public DataSet getds(string sqlstring) { SqlConnection sqlcon = this.getcon(); SqlDataAdapter sqlda = new SqlDataAdapter(sqlstring, sqlcon); DataSet myds = new DataSet(); sqlda.Fill(myds); return myds; } //执行sql语句并返回一个sqlReader类型的对象,用于读取查询的数据 public SqlDataReader getread(string sqlstring) { SqlConnection sqlcon = this.getcon(); SqlCommand sqlcom = new SqlCommand(sqlstring, sqlcon); sqlcon.Open(); SqlDataReader sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection); return sqlread; }