数据库:
数据存储和管理技术
ADO.NET就是这样一种技术
分类:
单机版数据库、网络版数据库
小型数据库、中型数据库、大型数据库、海量数据库
非关系型数据库、关系型数据库
SQL语言(后补充)
Structured Query Language 结构化查询语言
与DBMS通信的一种语言和工具
select insert update delete
ADO.NET
一组类 一组组件 一系列方法 :向.NET程序员公开数据访问服务
支持两种访问数据的模型:无连接模型:DataSet 连接模型
ADO.NET对象模型的各部分:DataBase Connection DataAdapter DataReader DataSet DataTable
Connection对象
建立与数据库的物理连接
4种:SQL Server数据提供程序 System.Data.SqlClient
ODBC数据提供程序 System.Data.Odbc
OLEDB数据提供程序 System.Data.Oledb
Oracle数据提供程序 System.Data.OracleClient
属性:public override ConnectionState {get;} 判断数据库的连接状态
属性值:ConnectionState枚举
Broken:与数据源的连接中断。只有在连接打开之后才可能发生。可以关闭处于这种状态的连接,重新打开。
Closed:连接处于关闭状态。
Connecting:连接对象正在与数据源连接
Executing:连接对象正在执行命令
Fetching:连接对象正在检索数据
Open:连接处于打开状态
方法:Open(); 打开数据库
Close(); 关闭一个连接,当使用Close()关闭连接后,还可以调用Open()方法打开连接
Dispose(); 关闭一个连接,清理连接所占用的资源,使用Dispose()关闭连接后,不可以直接用Open()方法打开连接,必须再次重新初始化连接后再打开。
Command对象
数据命令对象 主要功能:向数据库发送查询、更新、删除、修改操作的SQL语句
4种:SqlCommand OleDbCommand OdbcCommand OracleCommand
属性:Connection:设置SqlCommand使用的SqlConnection
CommandText:要对数据源执行的SQL语句或存储过程
CommandType:指定CommandText的类型 3个枚举成员:StoredProcedure 存储过程的名称
TableDirect 表的名称
Text:SQL文本命令
方法:public override int ExecuteNonQuery();
执行SQL语句,返回受影响的行数,在使用SqlCommand向数据库发送增、删、改命令时,通常使用ExecuteNonQuery方法执行发送的SQL语句。
public SqlDataReader ExecuteReader();
执行SQL语句,并生成一个包含数据的 SqlDataReaderdui'对象的实例。
public override Object ExecuteScalar();
执行SQL语句,返回结果集中的第一行的第一列或空引用 (如果结果集为空)。ExecuteScalar()通常与聚合函数一起使用,常见的聚合函数,如下:
AVG(expr):列平均值,该列只能包含数字
COUNT(expr)/COUNT(*):列值的计数(expr)/表或分组中所有行的技术(*)忽略空值,但COUNT(*)在计数中包含空值
MAX(expr):列中最大值(文本数据类型中按字母顺序排在最后的值),忽略空值
MIN(expr):列中最小值(文本数据类型中按字母顺序排在最前的值),忽略空值
SUM(expr):列值的和,该列只能包含数据
DataReader对象
数据读取器对象,提供只读向前的游标,如果应用程序需每次从数据库中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,就可以使用DataReader对象进行读取。
4种:SqlDataReader OleDbDataReader OdbcDataReader OracleDataReader
属性:public override bool HasRows{get;} 该SqlDataReader是否包含一行或多行
方法:public override bool Read(); 使SqlDataReader前进到下一条记录,SqlDataReader的默认位置在第一条记录前面。
public override void Close();在使用完SqlDataReader对象后,要使用Close方法关闭SqlDataReader对象。
(注)对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在第一个关闭之前,打开另一个将失败。
DataAdapter 数据适配器
DataSet与数据源之间的桥梁
属性:
SelectCommand:向数据库发送查询SQL语句
DeleteCommand:向数据库发送删除SQL语句
InsertCommand:向数据库发送插入SQL语句
UpdateCommand:向数据库发送更新SQL语句
方法:
public int Fill(DataSet dataSet, string srcTable); dataSet:要填充的DataSet srcTable:用于表映射的源表的名称
用数据填充DataSet,返回已在DataSet中成功添加或刷新的行数。
Fill()方法使用select语句从数据源中检索数据,与select命令关联的Connection对象必须有效,但不需要Open().
public int Update(DataTable dataTable); dataTable:用于更新数据源的DataTable
将DataSet中修改过的数据及时更新到数据库,返回DataSet中成功更新的行数 。
在使用Update()方法之前,实例化一个CommandBuilder类,他能自动根据DataAdapterde的SelectCommand的SQL语句判断其他的DeleteCommand/InsertCommand/UpdateCommand。
DataSet 数据集
像存放于内存的一个小型数据库,可以包含数据表/数据列/数据行/视图/约束/关系。
数据来源:数据库/XML
方法:
public void Merge(DataSet dataSet, bool preserveChanges, MissingSchemaAction missingSchemaAction);
dataSet:其数据和架构将被合并到DataSet中
preserveChanges:要保留当前DataSet中的更改,则为true,否则为false
missingSchemaAction:MissingSchemaAction枚举:
Add:添加必需的列以完成架构
AddWithKey:添加必需的列和主键信息以完成架构,用户可以在每个DataTable上显示设置主键约束,这将 确保对现有记录匹配的传入记录进行更新,而不是追加。
Error:如果缺少指定的列映射,则生成InvalidOperationException
Ignore:忽略额外列
(注)当DataSet对象为null时,无法进行合并
public DataSet Copy();
可以:创建DataSet的原样副本,其中包含架构/数据/行状态信息/行版本
创建包含现有DataSet的架构,但仅包含已修改行的DataSet。可以返回已修改的所有行或者指定特定的DataRowState
仅复制DataSet的架构(即关系结构),而不复制任何行。可以使用ImportRow将行导入现有的DataTable。
本文是《C#从入门到精通》一书中的13章,源码路径待补充…………