C#-ADO.NET 笔记(一直补充...)




DataSet

DataAdapter

DataRow

DataColumn

DataView

DataRowView

更新数据源

使用CommandBuilder自动更新数据源

手动Update

Update的事件

RowUpdating RowUpdated

FillError

ADO.NET中的映射

表映射

列映射

Fill方法总结

Update方法总结

如何为表定义主键

定义多个主键

如何添加约束

常见问题总结


DataSet

       DataSet是支持Ado.NET断开式分布式数据方案的核心对象,它是数据在内存中驻留的表示形式,它可用于多种不同的数据源,用于XML数据,或用于管理应用程序本地数据;

       DataSet表示包括相关约束表间关系在内的整个数据集.

DataSet 用于执行以下功能:

l          在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,DataReader 是更好的选择。

l          在层间或从 XML Web 服务对数据进行远程处理。

l          与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。

l          对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。

DataAdapter 使用 DataReader 来填充 DataSet 的内容(参考MSDN)

示例:

    //创建一个DataSet对象.(如果你没有为它指定名字,则自动生成"NewDataSet")

    ds = new DataSet("MyDataSet");

 

注意:如果DataSet中只存在一个表,不需要对表名区分大小写的.反之,则要区分.

 

 

DataAdapter

       DataAdapter在数据源和DataSet之间,起着桥梁的作用.

       DataAdapterFill 方法使用 DataReader 对象来隐式地返回用于在 DataSet 中创建表的列名称类型以及用于填充 DataSet 中的表行的数据。表和列仅在不存在时才创建;否则Fill 将使用现有的 DataSet 架构。如果 Fill 发现某个表存在主键,对于主键列的值与从数据源返回的行的主键列的值匹配的行,将使用数据源中的数据重写 DataSet 中的数据。如果未找到任何主键,则数据将追加到 DataSet 中的表。主键不会创建除非主键存在于数据源中并且 DataAdapter.MissingSchemaAction 设置为 MissingSchemaAction.AddWithKey

       如果DataAdapter遇到多个结果集,将在DataSet中自动创建多个表,如果在Fill指定表名,则以YourTableNameN递增表名,如果没有指定,则以TableN递增;

       你可以使用多个DataAdapter来填充一个DataSet,这样,你就可以连接多种类型的数据库,却放在同一个DataSet,还能关联它们(比如对两个来自不同数据库的表进行DataRelation).

示例:注意,例子中并没有显式的使用conn.Open()/Close(),其实当Fill发现连接尚未打开,它将自动隐式打开SqlDataAdapter正在使用的连接,并且Fill还将在完成时自动隐式关闭连接.并且Fill方法会在填充后,默认情况下会自动将所有行设置为UnChanged.(是否自动设置为UnChanged,DataAdapterAcceptChangesDuringFill属性控制.如果AcceptChangesDuringFill=false,那么新添加的行状态就是Added)

    conn = new SqlConnection(strConn);

    ds = new DataSet();

    SqlDataAdapter da1 = new SqlDataAdapter("SELECT * FROM Products", conn);   

da1.Fill(ds, "Products");

 

    //将指定行FillDataSet

    //0:表示Fill的行标    1:表示要填充的行数

    da.Fill(ds, 0, 1, "Product");

 

注意:应显式Open/Close连接,尽可能短的减少连接时间;

 

 

DataRow

       使用DataRow对象及其属性和方法检索、评估、插入、删除和更新DataTable中的值.

DataRow对象没有直接在代码中使用的构造函数,一般使用DataTableNewRow()方法来新建.

一个DataRow对象被创建后,其状态是Detached(比如 DataRow row = table.NewRow()),是孤立存在的;table.Rows.Add(row),其状态就转变成了Added;当修改了这个DateRow(比如:table.Rows[0][“NAME”]=”bush”)以后,其状态就转变成了Modified;当调用table.Delete(row)方法后,其状态就转变成了Deleted,不过此行依然存在于DataTable,如果Count行数,依然没有变的,只有调用了AcceptChanges真正删除,或是你调用table.Remove(row),此行即可一步删除,此时状态也回归到Detached.

一旦调用了AcceptChanges()方法后,AddedModifiedUnchanged将保留当前值(只有Current值了),Deleted状态的行将从DataTable中移除,最后所有行的状态都是Unchanged.

Fill方法会自动调用AcceptChanges()方法,DataTable中的行全部置于Unchanged状态;如果Fill方法中指定的那个DataSet中的DataTable不存在时,它将新生成一个同数据源同结构的DataTable.

DataRowRowState属性

RowState

说明

Unchanged

自上次调用 AcceptChanges 之后,或自 DataAdapter.Fill 创建了行之后,未做出过任何更改。

Added

已将行添加到表中,但尚未调用 AcceptChanges

Modified

已更改了行的某个元素。

Deleted

已将该行从表中删除,并且尚未调用 AcceptChanges

Detached

该行不属于任何 DataRowCollection。新建行的 RowState 设置为 Detached。通过调用 Add 方法将新的 DataRow 添加到 DataRowCollection 之后,RowState 属性的值设置为 Added

对于已经使用 Remove 方法(或是在使用 Delete 方法之后使用了 AcceptChanges 方法)从 DataRowCollection 中移除的行,也设置为 Detached

 

注意: DataRowCollection DataRow 的关系:DataRowCollection表示DataTable中实际DataRow的对象.(见下例)

    //加上索引,就是DataRowCollection(集合)中的某一行了,故用DataRow对象表示

    DataRow row = table.Rows[1];

    row["姓名"] = "蝙蝠侠";

 

    //table.Rows 的返回值就是 DataRowCollection(集合)

    DataRowCollection rowC = table.Rows;

    rowC[1]["姓名"] = "蝙蝠侠";

 

 

DataColumn

DataColumn是用于创建DataTable架构的基本构造块.每个DataColumn都有DataType属性,DataTable中各列的属性必须与数据源中列的属性相匹配.

       DataColumn的各属性示例:

DataColumn ID = new DataColumn("学号");

    ID.AutoIncrement = true;

    //ID.AutoIncrementSeed = 5;//自动增列的起始值

    //ID.AutoIncrementStep = 5;//增量

 

    DataColumn Name = new DataColumn("姓名");

    Name.AllowDBNull = false;//

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值