当前位置: 首页 > news >正文

浅谈DataSet 的用法

DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, 而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针。DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。

  DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作,而DataTable中又包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则可以调用DataAdapter的Update方法。

  DataSet的操作:

DataSetds = new DataSet();
DataTabledt
= new DataTable( " newTable " );
ds.Tables.Add(dt);
DataSetds = new DataSet();
DataTabledt
= ds.Tables.Add( " newTable " );

上述两种方法都可以在DataSet中添加一个DataTable,看需要而进行选择。添加DataTable后,需向其中添加行和列。

DataSetds = new DataSet();
DataTabledt
= ds.Tables.Add( " newTables " );
DataColumncol
= dt.Columns.Add( " newColumn " , typeof ( int ));
col.AllowDBNull
= false ;
col.MaxLength
= 4 ;
col.Unique
= true ;

上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最大长度为4和唯一性为真的列。

dt.PrimaryKey = new DataColumn[] {dt.Columns["ID"]}

这段代码是继续上面代码的,为一个DataTable中添加一个主键列,主键列是一个数据组,如有多个主键,只需在数组中添加一个列即可。如下:

dt.PrimaryKey = new DataColumns[] {dt.Columns["OrderID"],dt.Columns["ProductID"]}

添加外键:

ForeignKeyConstraintfk;
fk
= new ForeignKeyConstraint(ds.Tables[ " Customers " ].Columns[ " CustomerID " ],ds.Tables[ " Orders " ].Columns[ " CustomerID " ]);
ds.Tables[
" Orders " ].Constraints.Add(fk);
// 上述代码假如已经为Cusomers表和Orders创建了主键,此句为添加外键约束。

上述是根据Customers表和Orders表的CustomerID来创建约束。

下面介绍修改DataRow中的内容:

DataRowdr = ds.Tables[ " Customer " ].Rows.Find( " ANTON " );
if (dr == null )

else
{
dr.BeginEdit();
dr[
"CompanyName"]="newValue";
dr[
"ContactName"]="newValue2";
dr.EndEdit();
}

// 上面代码通过Row集合的Find方法来在DataTable中的行进行定位,找到"ANTON"行,再修改"ANTON"行中CompanyName列和ContactName列的值。通过BeginEdit和EndEdit来缓存对行的修改,还可调用CancelEdit为取消修改。

判断某列是否为空值:

DataRowdr = ds.Tables[ " Customers " ].Rows.Find( " aaa " );
if (dr.IsNull( " ContactName " );
..
else
dr[
" ContactName " ] = DBNull.Value
// 这里判断ContactName列是否为空,如果不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。

删除DataRow:

有两种方法可以删除DataRow,Delete方法和Remove方法和RemoveAt方法。其区别是Delete方法实际上不是从DataTable中删除掉一行,而是将其标志为删除,仅仅是做个记号,而Remove方法则是真正的从DataRow中删除一行,RemoveAt方法是根本行的索引来删除。列:

DataRowdr = ds.Tables[ " table " ].Rows.Find( " a " );
ds.Tables[
" table " ].Remove(dr);

ds.Tables[
" table " ].Remove(index);
// dr为"a"所在的行,查出后将其删除,index为"a"所在的索引号。
关于DataSet中的其用法,参照MSDN
DataRowdr = ds.Tables[ " Customers " ].Rows.Find( " aaa " );
if (dr.IsNull( " ContactName " );
..
else
dr[
" ContactName " ] = DBNull.Value
// 这里判断ContactName列是否为空,如果不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。

相关文章:

  • 多维数组和矩阵之顺时针打印二维数组
  • 各种数据库连接代码(JSP)
  • 多维数组与矩阵之0所在的行列清零
  • 多维数组与矩阵之之字形打印矩阵
  • 生姜有味的调色板
  • 设计模式之策略者模式详解(Strategy Pattern)
  • 利用J2ME里的RMS对记录进行排序
  • 设计模式之职责链(责任链)模式(ResponsibilityChain Pattern)
  • SWT GC的drawLine方法的一个隐藏Bug
  • 多维数组与矩阵之子数组的最大累加和
  • 游戏也是软件,J2ME游戏程序员不能忘本
  • 多维数组与矩阵之子矩阵的最大累加和
  • 本周技术关注:Oracle10G、MSSQL2005、MYSQL5: CLuster、Replication、Snapshot
  • 设计模式之解释器模式详解(Interpreter Pattern)
  • 书评--信息经营法则
  • Android系统模拟器绘制实现概述
  • AWS实战 - 利用IAM对S3做访问控制
  • Git同步原始仓库到Fork仓库中
  • java正则表式的使用
  • Lsb图片隐写
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 小试R空间处理新库sf
  • 《码出高效》学习笔记与书中错误记录
  • Nginx实现动静分离
  • 交换综合实验一
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # Java NIO(一)FileChannel
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (42)STM32——LCD显示屏实验笔记
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Forward) Music Player: From UI Proposal to Code
  • (笔试题)分解质因式
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (蓝桥杯每日一题)love
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)uboot源码分析
  • (转)jQuery 基础
  • (转)linux下的时间函数使用
  • (转)用.Net的File控件上传文件的解决方案
  • .apk 成为历史!
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 成都线下面基会拉开序幕
  • .net core 依赖注入的基本用发
  • .NET Core中的去虚
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net的DataSet直接与SQL2005交互
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @SuppressWarnings(unchecked)代码的作用
  • @synthesize和@dynamic分别有什么作用?
  • [ C++ ] 继承
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题