2024年1月9日发(作者:)
1.什么是?其主要的作用是什么?
解答:
是 Framework的核心组件。借助,可以展示最新数据访问技术,这是一种高级的应用程序编程接口,可用于创建分布式的数据共享应用程序。
2.什么是事务?事务具有什么属性?
解答:
事务是一组要么全部成功,要么全部失败的操作。
事务具有的属性有:
原子性:事务的所有步骤要么全部成功执行,要么全部不执行,只有一个事务的全部步骤全部执行成功,整个事务才成功。
一致性:事务把它基于的数据库从一个稳定状态转换到另一个稳定状态
隔离性:保证每一个事务都是一个独立的整体,同时运行时,事务之间互不干扰
持久性:在事务声明成功前,事务期间的改变,将永久储存在一些介质中。事务失败时,可以保证数据库的完整性。
3. DataAdapter 的作用是什么?
解答:DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用 Command
对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。1.什么是?其主要的作用是什么?
4.什么是连接池?连接池的使用有什么好处?
解答:连接池是位于内存中的一块区域,它用于存放各种连接对象的连接信息,当一个连接需要与数据库进行连接时,它首先要到连接池中去查找是否已有信息存放在连接池中,如果有,则不需要再创建相同的连接对象即可使用,但如果在连接池中没有已存的信息,则需要重新建立一个新的连接。有连接池在某种情况下(如连接字符串都相同)可以大大减少重新建立连接的次数,从而使数据的连接更快捷,但需要更大的内存空间。相反,如果没有连接池,则可能会使连接速度变慢,但同时可以节约内存空间。
ader对象有什么作用?如何获得具有DataReader对象的数据?
解答:DataReader对象是从数据源中读取只读的,只向前的数据流.它的特点是读取速度非常快.但需要手动的编写代码来实现数据的处理工作。
6. DataTable和DataView之间有何不同?
解答:DataTable对象用来表示DataSet中的表。一个DataTable表示内存中的关系数据的一个表。数据对于它所驻留的.NET应用程序是本地的,但它不能用现有的数据源填充。
DataView对象类似于SQL Server中的视图。它表示DataTable中数据子集的对象。
connection对象方法
open() 打开连接
close() 关闭连接
dispose() 释放连接
一旦连接被创建,势必会占用我们的资源 及时连接关闭 占用的资源任然是存在的 释放连接就是指把占用的资源还给内存
连接池 Pool
连接池是指内存当中一个用来保存连接资源的进程。也就是说在连接池启用的情况下,一旦连接被建立,当该连接被关闭的时候,会把该连接的信息送入连接池,以便下次再次使用
一个连接池只能存放一个连接的信息:连接字符串相同的连接会被放入同一个连接池
假如我们有一个程序提供给广大的考生查询成绩 此时连接的用户可能很多 那么在启用连接池的情况下就可以节约可观的资源
一间大教室 100个人使用 开门就相当于连接 没有启用连接池 相当于100个人都要自己去生成一把钥匙
开启连接池 相当于第一个人生成钥匙后 离开了就会把这个钥匙放入连接池
异常:程序出错
严重程度
严重度等级低于10 此时我们不叫它异常 而是会触发一个返回警告信息的一个事件
处理异常
try
{
要进行捕获异常的地方
}
catch
{
try里面的代码有错误 才会执行 catch里面的代码
}
finally
没有错误 直接执行到这里
有错误 先catch 然后再finally
ion类是所有异常的基类型。此类具有一些所有异常共享的值得注意的属性:
Exception是异常的基类。若干异常类直接从Exception继承,
SqlException继承Exception ,是Exception的子类Exception是所有异常对象的基类而SqlException只在执行SQL方法时才有
Exception 属性
message:错误的描述性文本
number: 异常的代号
class: 异常的严重度等级
linenumer:出现异常的代码的行号
2 command对象:
connection对象来建立与数据库的连接后,使用command对象对数据库执行sql语句命令
(增 删 改 查) 会把相应的执行结果返回给应用程序
sqlcommand对象
1) 属性:
timeout:命令的响应时间 ,默认值 30s
connection: 命令对象command所使用的连接,只有连接到数据库,才能对数据库执行操作
commandText:命令对象command所要执行的sql命令的命令文本
取值:(1)执行SQL语句 select count(*) from customers
(2)调用存储过程 p_customer_count
(3)表的名称:表示此事应用程序将会去遍历该表的内容
计算机并没有人工智能,问:那么计算机此时如何区分commandText的值是sql语句
还是存储过程?? ----靠另一个属性commandtype
commandType:类型约束:约束commandText的类型---如何去解释commandText
取值: (1) Text (默认)表示解释commandText的值为sql命令语句
(2)StoredProcedure 表示解释commandText的值为存储过程
(注意:取storeprocedure表示command将要调用数据库的过程,所以过程 名要确实存在的)
(3)TableDirect :表示commandText的值取表的名字,遍历该表
连接sql server使用sql 数据提供程序时:
.Net Framework SqlClient Data Provider 不支持 CommandType 枚举值TableDirect
记住: sql server 不支持TableDirect
parameters参数集合:表示sql命令里包含的各参数
参数名以@开头 @@则表示为系统参数
参数数据类型跟数据库对应的列的数据类型
参数类型: input 输入参数(默认)
output 输出参数
2) 方法
(1)ExecuteScalar() :表示执行sql查询语句,并返回查询结果的第一行第一列
换言之,返回是一个单一值。因此常与sql的聚合函数结合使用
常见聚合函数:count() avg() sum() max() min()
(2) ExecuteNonquery(): 执行sql操作语句(insert、delete、update)
方法返回受sql命令所影响的数据行的行数
(3) ExecuteReader():
事务
什么是事务?? 事务干什么用?? 怎么用??
事务的概念: 事务把一系列定义好的操作步骤作为一个整体的单元 保证在同一事务内的这些步骤要么一起成功 要么一起失败
转账: 甲----->(1000)----->乙 1 甲的账户-1000
2 乙的账户+1000
事务的特性:ACID特性 A atomicity 原子性 事务就如同一个原子 不可分割
C consistency 一致性 事务能保证不管处理过程中发生了任何问题 数据都是正确的
I Isolation 隔离性 事务和事务之间互相隔离 不能互相访问
D durability 持续性 如有故障 通过日志 事务能继续
控制事务的语句
begintransaction() 定义事务 事务开始
commit() 成功提交事务
rollbace() 失败回滚事务
数据适配器 DataAdapter
也称为数据搬运工 它是数据库和应用程序之间数据传输的桥梁
保持连接的体系
断开连接体系
1 如何创建数据适配器
数据适配器的属性:
四个command对象
selectcommand:决定了数据适配器要搬运的内容 select语句查询的结果将用于数据适配器的填充内容
insertcommand:负责把数据集中所有新增的数据更新回数据库
updatecommand:负责把数据集中所有被修改的数据更新回到数据库
deletecommand: 负责把数据集中所有被删除的数据更新回数据库
命令构造器: SqlCommandBuilder
如果selectcommand查询结果中不包含主键列 那么commandbiulder将不会生成updatecommand 和 deletecommand
11.14
数据集:DataSet
概念:DataSet类是数据的脱机容器,是临时储存数据的仓库。是内存中的一个进程。
DataSet里面的内容不一定来自于数据库 ,由数据表和表间联系组成
Tables Relations
数据集的分类:
1 类型化(强类型)的数据集: 具有内置架构 数据集的数据结构来自于架构文件 XSD文件(由XSD文件来决定的) 用户没有办法直接编辑数据集的架构(只能通过编辑XSD文件)
架构:可以理解为是数据表的结构 (列 约束 键)
2 非类型化的数据集: 没有内置架构
11.21
数据集
1 数据行的状态和版本
Dataset里面的数据更改的信息可以通过两种方式来记录和维护:第一种是对数据行的状态做标记----用于指示该行是否被修改,发生了何种修改
第二种是对数据行的版本做保留----记录当前的版本以及之前的版本
行的状态
数据集里面表的数据都是通过数据行来呈现。行的状态信息存储在rowstate属性
rowstate 说明
Added 该行已作为一项添加到数据行集 (这个行是属于新增的)
Deleted 该行已经被删除
modified 改行的列值已经被修改
unchanged 自上一次保存(acceptchange)后,该行没有被更改(无变化)
detached 脱离状态(不属于任何一个表的数据行集)
行的版本:
数据集会维护数据行的多个版本
rowversion 说明
current 当前值:当前版本实际上是自上次保存以来对数据行所做的所有的修改,若该行被删除,则没有当前版本
original 原始值:最后一次提交后数据集的数据
default 默认值
proposed 建议值
删除数据行
remove() 从我们的datarowcollection(数据行集合)中删除数据行
delete() 只是给被删除的数据行添加一个删除标记 ,此时添加删除标记以后该行不会参与数据运算 直到数据集被数据适配器DataAdapter更新回数据库时,才会删除掉带删除标记的行
为什么要用delete而不是都使用remove?
推迟修改:
不管是计算机,还是我们程序运行的过程,总会发生业务冲突或者完整性约束,此时有必要暂时挂起对数据的验证,直到一系列的编辑操作完成为止
使用beginedit canceledit endedit 来处理对数据的编辑过程
数据集内容被修改(增删改)
修改行的时候会触发RowChanging和RowChanged事件
删除行的时候会触发Rowdeleting和Rowdeleted事件
新增行的时候会触发Rowadding和Rowadded事件
数据更新
update()来把数据集dataset里面的数据更新回到数据库 要求要有insertcommand
deletecommand updatecommand
在执行update方法的时候:会有以下情况:
1 dataadapter 检查指定的dataset或dataset中的datatable 【如update(ds) ds是数据集 Update(dsstudent ,"student"); student是数据集dsstudent的表】
中每一行的rowstate,根据行状态rowstate来执行对应的命令 : 新增状态Added-->insertcommand 被修改modified---->updatecommand 被删除deleted---->deletecommand
2 command对象的参数集合将基于数据源的列和sourceversion属性被填充
3 引发RowUpdating事件 :当把数据集的行更新回数据库时触发
4 执行命令
5 根据行状态rowstate来执行对应的命令
6 引发RowUpdated事件
7 数据集或数据表会调用acceptchange()方法
acceptchange()方法:接受对数据集的更改 当我们调用该方法的时候 数据集中所有非unchanged 的行状态都置为unchanged
rejectchange()方法:拒绝更改
getchanged() 获得当前数据集的一个副本 副本拥有跟该数据集相同的结构 并保存所有非unchanged状态的行
merge() 合并数据集
三层架构


发布评论