数据库编程-中级篇 断开式
断开式的关键对象是Dataset,因为DataSet包含了3个重要的集合,使得DataSet可以看成一个断开连接的数据库副本:
DataSet: 1.DataTableCollection 2.DataRelationCollection 3.PropertyCollection
DataSet的主要属性:
除了Tables、Relations和ExtendedProperties属性之外,还有以下属性:
CaseSensitive 表示Datatable对象中的字符串是是否区分大小写,默认为false 即不区分大小写
DataSetname 表示DataSet的一个友好名,通常通过构造参数指定
EnforceConstraints 获取或设置一个值,该值指示在尝试执行任何更新操作时是否遵循约束规则。
HasErrors 获取一个值,指示在此DataSet种任何DataTable对象中数据行是否存在错误
RemodtingFormat 定义DataSet在传输时内容的序列化方式【二进制序列化或xml序列化(默认值)】
DataSet的主要方法
AcceptChanges() 提交自加载此DataSet或上次调用AcceptChanges以来对其进行的所有更改。
Clear()通过移除所有DataTable表中的所有行来清楚任何DataSet的数据。
Clone() 复制DataSet的结构,而不是DataSet的数据,包括所有DataTable架构、关系和约束
Copy()赋值该DataSet的结构和数据
HasChanges() 获取一个值,该值指示DataSet是否有更新,包括新增行、已删除的行或已修改的行。
Merge() 将制定的DataSet合并到当前的DataSet中
ReadXml()基于XML 架构和从流中读取的数据,定义DataSet对象的结构病用于数据填充它
RejectChanges() 回滚自创建Dataset以来或上次调用AcceptChanges()以来对其进行的所有更改
WriteXml() 把DataSet的内容写入一个有效的数据流
例如:
//建立DataSet对象并添加一些属性
DataSet carsInventoryDS = new DataSet("Car Inventory");
carsInventoryDS.ExtendedProperties["TimeStamp"] = DateTime.Now;
carsInventoryDS.ExtendedProperties["DataSetID"] = Guid.NewGuid();
carsInventoryDS.ExtendedProperties["Company"] = "Mikko's Hot Tub Super store";
只有在DataSet中插入DataTable,DataSet才有意义。
DataTable->DataColumn 的属性
AllowDBNull 该属性用来指示对表中的行,此列值是否允许空值,默认为true 对应Sql: is null
AutoIncrement、AutoIncrementSeed 和AutoIncrementStep 这些属性用来配置该类的自增行为 对应Sql identity(1,1)
Caption 该属性用来获取或设置要显示的列的标题,它允许我们为数据库列名定义一个用户友好的版本。对应sql:as fieldname
ColumnMapping:该属性决定当使用DataSet.WriteXml()来把DataSet保存到XML文件时,该列将以什么样的形式呈现。把数据列写成XML元素、XML特性或文本的形式。
ColumnName 该属性用来获取或设置列集合中的列名(在DataTable内部以什么样的名字呈现) ,默认的列名是ColumnN
DataType 该属性定义了存储在列中的数据类型(如string,bool,float) sql:int varchar(30)
DefaultValue 该属性用来获取或设置在创建新行时列的默认值,对应sql:default
Expression 该属性用来获取或设置表达式,用于筛选行,计算列中的值或创建聚合列
Ordinal 该属性用来以数字形式获取DataTable中列在Columns结合中的位置 dt.getValue(i)
ReadOnly 该属性指示如果向表中添加了行,列是否允许更改,默认为false
Table 该属性用来获取DataColumn所属的DataTable
Unique 该属性用来获取或设置一个值,指示列的没遗憾管是否必须是唯一的 对应sql: unique 约束
DataTable->DataRolw类型的主要成员
HasErrors HasErrors属性返回一个布尔值,指示改行是否存在错误
GetColumnsInError() GetColumnsInError()可以用来获取包含错误的成员,GetColumnError()获取错误说明
GetColumnError() CelarError()用来清除改行的所有错误
ItemArray 这个属性通过一个对象数组来获取或设置慈航的所有列值
RowState 这个属性用来得到DataTable中的当前DataRow的状态,值有RowState枚举定义(如 行可以被标记为新增、已修改、未改变或已删除)
AcceptChanges()和RejectChanges() 这些方法提交或拒绝自上次调用AcceptChanges以来对改行进行的所有更改
BeginEdit() EndEdit() 和CancelEdit() 这些方法开始、结束和取消对某DataRow对象的编辑操作
Delete() 这个方法能标记改行为待删除、调用AcceptChanges()后移除改行
IsNull 这个方法获取一个值,该值指示指定的列是否包含空值
使用DataRow和使用DataColumn有些不同,因为没有公共构造函数,所以不能直接创建该类的实例,只能从某个DataTable获得新的DataRow
如: DataRow dr=DateTable.NewRow(); //该方法能让你获得一个该表的下一个“插槽”。
dr["PetName"]="erts";
DataTable.Rows.Add(dr);
DataRowState枚举的值
Added 该行意添加到DataRowCollection中,AcceptChanges()尚未调用。
Deleted 改行标记为通过DataRow的Delete()方法被删除,并且没有调用AcceptChanges()方法
Detached 改行已被创建,但不属于任何DataRowCollection.DataRow在一下情况下立即处于此状态:创建之后,添加到集合中之前或者从集合中移除之后
Modified 改行已经被修改,AcceptChanges()尚未调用
UnChanged 改行自上次调用AcceptChanges()以来尚未更改。
DataRowVersion枚举值
Current 表示行的当前值,即使在做出改变后
Default DataRowState默认值 对于Added Modified或Deleted值得DataRowState,默认版本就是Current.对于Detached的DataRowState版本就是Proposed
Original 表示首次插入DataRow的值,或AcceptChanges()最后一次被嗲用后的值。
DataTable类型的主要成员
CaseSensitie 表示表中的字符串比较是否区分大小写 ,默认为false
ChildRelations 获取此DataTable的自关系的集合
Constraints 获取由该表维护的约束的集合
Copy() 将某个DataTable的架构和数据复制到新的实例中
DataSet 获取词表所属的DataSet
DefaultView 获取可能包括筛选视图或游标位置的表的自定义视图
ParentRelations获取该DataTable的父关系的集合
PrimaryKey 获取或设置充当数据表主键的列的数组
TableName 获取或设置表名,同样能够通过构造函数参数指定这个属性。
例如:DataTable inventoryTable=new DataTable("Inventory")
inventoryTable.PrimaryKey=new DataColumn[]{ inventoryTable.Columns[0] };
ds.Tables.Add(inventoryTable);
使用数据适配器
DbDataAdapter类的核心成员
Fill() 执行Sql select 命令,(由selectCommand属性指定)查询数据库并将数据加载到DataTable中
SelectCommand、InsertCommand、UpdateCommand、DeleteCommand():建立用于Fill()和Update()方法的由数据库执行的SQL命令
Update() 执行update、insert、delete命令(由InsertCommand、UpdateCommand、DeleteCommand属性指定来持久化DataTable修改到数据库中)