网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

ADO.NET学习笔记(三)

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/02/27

【编者按】:网学网ASP.net为您提供ADO.NET学习笔记(三)参考,解决您在ADO.NET学习笔记(三)学习中工作中的难题,参考学习。


  (由于书上的代码全是用C#写的,转换为VB.NET实在麻烦,以后就不转换了,见谅) 
五、操纵dataset 
在DataSet中DataRow是其所有数据的基本存放位置,它主要是由一个值数组组成,代表DataTable单独一行。 
DataRow中主要包括一下几种信息:1、行中每一列的当前值,2、行中每一列的原始值,3、行状态,4、父行与子行间的链接 

初始化一个DataRow: 
DataTable dataTable=dataSet.Tables[0]; 
DataRow newRow=dataTable.NewRow(); //用dataTable生成DataRow可以利用dataTable里面的模式 
dataTable.Rows.Add(newRow); 

删除行: 
DataTable.Rows.Remove(行实例); 
DataTable.Rows.RemoveAt(行号); 
DataRow.Delete(); //行自身移除 

读写DataRow的值: 
row["列名"],row[列号]均可引用其中的一个属性 
DataColumn a=dataTable.Columns("列名"); //可以获得一个列 

对行进行批处理更改: 
BeginEdit()开始更改,EndEdit()结束更改,同时将更改结果写入DataSet,CancelEdit(),取消更改 
例如: 
row.BeginEdit(); 
对row进行更改 
row.EndEdit(); 

将数据批量加载到DataTable 
dataTable.BeginLoadData(); 
dataTable.LoadDataRow(row1,false); //第二个参数为true时,调用dataTable.AcceptChanges()时接受更改,为false直接添加 
…… 
dataTable.EndLoadData(); 
使用这种数据加载方式可以在数据加载期间屏蔽所有的数据约束,索引也不会予以维护,极大的加快了数据加载速度 

行的版本: 
current:当前值 
default:根据操作的不同决定行的default值 
original:最后一次调用AcceptChanges()之后的值 
proposed:调用AcceptChanges()之前被更改的值 
例如要获得行的original值: 
String oldString=row("FirstName",DataRowVersion.original); 

行的状态: 
row.RowState获得行的状态,例如删除后变成Deleted,数据存储更新后变为unchanged 

六、DataSet导航 
在ADO.NET中每个表都保持其相对独立性,允许在行级上导航不同表之间的相关行(向下导航到子行,向上导航的父行) 
如DataRow[] invoiceRows=custRow.GetChildRows("Customer_invoice"); //通过关系导航到子行 

七、DataView 
DataView就时数据视图,为数据库结构提供了外模式的实现。 
同时DataView也可以为窗体控件和Web控件提供数据绑定功能,在每一个DataTable中内建了一个DataView为:DataTable.DefaultView(); 

创建DataView 
DataView sortedView=new DataView(dataTable); 

对DataView进行排序 
dataTable.DefaultView.sort="lastName"; 
dataTable.DefaultView.sort="lastName,FirstName DESC"; 

对DataView进行筛选: 
1、通过对其中的RowFilter属性设置可以实现筛选 
dataTable.DefaultView.RowFilter="Vendor=’Rawlings’"; 
不过筛选表达式只能设置成比较简单的表达式,功能有限,不过可以满足基本的要求。 
同样在DataTable里面也可以进行简单的搜索,返回一个DataRow数组,例: 
DataRow[] compoundRows=dataTable.select("Vendor=’wilson’ AND price>20.00) 
2、通过RowState来筛选 
dataTable.DefaultView.RowStateFilter="DataViewRowState.originalRows"可以筛选出符合要求状态的row 

对DataView进行搜索: 
相对于DataView使用RowFilter进行筛选得到一个矩形数据集,使用Find、FindRows可以更准确的查找到与特定键相匹配的行 
搜索的时候必须首先设置DataView的sort属性: 
int found=dataTable.DefaultView.Find("wilson"); //获得行的位置 
DataRowView[] rows=dataTable.DefaultView.FindRows("Rawlings") //过得一个row数组 

八、更新DB 
在DataSet中,每一个DataTable对应着一个DataAdapter,DataAdapter.Update()时,DataTable自动更新。 
更新的时候可以使用CommandBuilder自动根据DataSet的变化生成更新的SQL命令 
SqlCommandBuilder bldr=new SqlCommandBuilder(dataAdapter); 
dataAdapter.Update(custTable); 
不过Update接受DataSet参数并不更新DataSet而是更新DataSet中的一个叫"Table"的表 
使用CommandBuilder进行更新的时候要注意一下几点: 
1、SelectCommand必须有效 
2、必须有主码 
3、若SelectCommand填充DataTable后架构发生改变,应该在Update()之前调用CommandBuilder.RefreshSchema(); 
4、更新DB时不受关系、约束或者DataSet中其他表的影响 
虽然使用CommandBuilder比较方便,不用自己写更新命令,但自动生成的命令性能不高,这时可以考虑自己编写存储过程或直接使用带参数的sql语句,例如: 
String insQry="Insert into Customer(CustomerID) Values (@Customer)"; 
SqlCommand insCmd=conn.CreateCommand(); 
insCmd.CommandText=insQry; 
SqlParameterCollection insParams=insCmd.Parameters; 
insParams.Add("@CustomerID",SqlDbType.UniqueIdentifier,0,"CustomerID"); 
dataAdapter.InsertCommand=insCmd; 
dataAdapter.Update(); 
在dataAdapter.Update()更新时还可以控制更新的范围: 
dataAdapter.Update(invTable.GetChanges(DataRowState.Deleted); //只更新被删除的部分 

九、事务 
tx=conn.BeginTransaction(IsolationLevel.Serializable); 
invDA.SelectCommand.Transaction=tx; 
事务操作 
tx.Commit();提交 //tx.Rollback();事务回滚 

十、数据绑定 
简单版本:(对文本框、标签等) 
{Controls}.DataBindings.Add("{Property}",{dataSource},"{dataMember}"); 
其中Property为待绑定的属性,dataSource为DataView或DataTable,dataMember为dataSource其中的某个属性 

复杂版本:(对ListBox、ComboBox等) 
要分别设置各个属性实现绑定: 
DataSource=支持IList的一个对象(DataTable或DataView) 
DisplayMember:待显示的DataSource中的一个属性 
ValueMember:确定在DataSource中引用哪一个数据行,即实现与DisplayMember的名值对应 

DataGrid绑定: 
1、可以设置DataSource属性实现静态绑定 
2、可以使用SetDataBinding函数实现动态绑定 

同时DataGrid支持主控/详细表显示 
masterGrid.setDataBinding(customerTable,""); 
detailGrid.setDataBinding(customerTable,"Customer_Invoices") //第二个属性要设置成关系约束 
这样在主表中选择一行,在子表中就根据主表行中外码在子表中找到相应行 

绑定之后,绑定项中就有一个CurrencyManager属性实现游标功能 
BindingContext[CustomerTable]返回一个CurrencyManager对象,其中的Position属性可以更改,实现游标的移动。
  • 上一篇资讯: ADO.NET学习笔记(一)
  • 下一篇资讯: ADO.NET学习笔记(二)
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号