ADONET的设计目标ADO
NET是Microsoft公司发布的新一代数据存取技术
是一个全新的数据库访问模型
使应用程序的开发人员能方便的访问不同的数据源
ADONET提供对SQL Server等数据源以及通过OLEDB和XML公开的数据源的一致访问数据共享应用程序可以使用ADONET来连接到这些数据源并检索操作和更新数据
设计目标n 支持断开式多层编程模式
n 能够与XML紧密集成
n 具有能够组合来自多个不同数据源的数据通用数据表示形式
n 具有为与数据库交互而优化的功能
ADONET体系结构
ADONET的两个核心组件()DataSet ()数据提供程序(DataProvider:包括ConnectionCommandDataReaderDataAdapter)
DataSet
u DataSet 是ADONET的断开式结构的核心组件
u 设计目的为了实现独立于任何数据源的数据访问
u 可以用于多种不同的数据源用于XML数据或用于应用程序本地数据
u DataSet包含一个或多个DataTable对象集合
数据提供程序(DataProvider)
设计目标为了实现数据操作和对数据快速只进只读访问
NET框架提供了个数据提供程序
SQL Server数据提供程序
OLE DB数据提供程序
ODBC数据提供程序
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#代码示例[csharp]
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemText;
using SystemDataSqlClient;
using SystemData;
using SystemTextRegularExpressions;
using SystemWindowsForms;
namespace 图书管理
{
class BaseOperate
{
//建立数据库连接
public SqlConnection getcon()
{
string str_sqlcon = data source=;database=library_sys;uid=sa;pwd=;
try
{
SqlConnection myCon = new SqlConnection(str_sqlcon)
return myCon;
}
catch (Exception ex)
{
MessageBoxShow(出错了链接出错MessageBoxButtonsOK)
throw ex;
}
}
//执行sqlcommand命令但无返回值
public void getcom(string sqlstring)
{
SqlConnection sqlcon = thisgetcon()
sqlconOpen()
SqlCommand sqlcom = new SqlCommand(sqlstring sqlcon)
sqlcomExecuteNonQuery()
sqlcomDispose()
sqlconClose()
sqlconDispose()
}
//执行sql语句并返回一个dataset数据集对象
public DataSet getds(string sqlstring)
{
SqlConnection sqlcon = thisgetcon()
SqlDataAdapter sqlda = new SqlDataAdapter(sqlstring sqlcon)
DataSet myds = new DataSet()
sqldaFill(myds)
return myds;
}
//执行sql语句并返回一个sqlReader类型的对象用于读取查询的数据
public SqlDataReader getread(string sqlstring)
{
SqlConnection sqlcon = thisgetcon()
SqlCommand sqlcom = new SqlCommand(sqlstring sqlcon)
sqlconOpen()
SqlDataReader sqlread = sqlcomExecuteReader(CommandBehaviorCloseConnection)
return sqlread;
}