ADO.NET 六(DataRow DataColumn)
已经介绍了使用 SqlCommand 对象中的 ExecuteNonQuery 方法执行非查询 SQL 语句来实现对数据表的更新操作,使用 DataSet 对象也能实现相同的功能, 并且能节省数据访问时间。
每个 DataSet 都是由多个 DataTable 构成的,更新 DataSet 中的数据实际上是通过更新 DataTable 来实现的。
每个 DataTable 对象都是由行 (DataRow) 和列 (DataColumn) 构成的,下面分别介绍 DataRow 类和 DataColumn 类的使用。
1) DataRow 类
DataRow 类代表数据表中的行,并允许通过该类直接对数据表进行添加、修改、删除行的操作。
DataRow 类中常用的属性和方法如下表所示。
| 属性或方法 | 说明 |
|---|---|
| Table | 属性,设置 DataRow 对象所创建 DataTable 的名称 |
| RowState | 属性,获取当前行的状态 |
| HasErrors | 属性,获取当前行是否存在错误 |
| AcceptChanges() | 方法,更新 DataTable 中的值 |
| RejectChanges() | 方法,撤销对 DataTable 中的值的更新 |
| Delete() | 方法,标记当前的行被删除,并在执行 AcceptChanges 方法后更新数据表 |
在 DataRow 类中没有提供构造方法,需要通过 DataTable 中的 NewRow 方法创建 DataRow 类的对象,具体的语句如下。
- DataTable dt = new DataTable();
- DataRow dr = dt.NewRow();
这样,dr 即为新添加的行,每行数据是由多列构成的,如果在 DataTable 对象中已经存在表结构,则直接使用dr[ 编号或列名 ]= 值的形式即可为表中的列赋值。
2) DataColumn 类
DataColumn 类是数据表中的列对象,与数据库中表的列定义一样,都可以为其设置列名以及数据类型。
DataColumn类中常用的构造方法如下表所示。
| 构造方法 | 说明 |
|---|---|
| DataColumn() | 无参构造方法 |
| DataColumn(string columnName) | 带参数的构造方法,columnName 参数代表的是列名 |
| DataColumn(string columnName,Type dataType) | 带参数的构造方法,columnName 参数代表的是列名,dataType 参数代表的是列的数据类型 |
DataColumn 类提供了一些属性对 DataColumn 对象进行设置,常用的属性如下表所示。
| 属性 | 说明 |
|---|---|
| ColumnName | 属性,设置 DataColumn 对象的列名 |
| DataType | 属性,设置 DataColumn 对象的数据类型 |
| MaxLength | 属性,设置 DataColumn 对象值的最大长度 |
| Caption | 属性,设置 DataColumn 对象在显示时的列名,类似于给表中的列设置别名 |
| DefaultValue | 属性,设置 DataColumn 对象的默认值 |
| AutoIncrement | 属性,设置 DataColumn 对象为自动增长列,与 SQL Server 中数据表的标识列类似 |
| AutoIncrementSeed | 属性,与 AutoIncrement 属性联用,用于设置自动增长列的初始值 |
| AutoIncrementStep | 属性,与 AutoIncrement 属性联用,用于设置自动增长列每次增加的值 |
| Unique | 属性,设置 DataColumn 对象的值是唯一的,类似于数据表的唯一约束 |
| AllowDBNull | 属性,设置 DataColumn 对象的值是否允许为空 |
下面通过实例来演示 DataRow 类和 DataColumn 类的使用。
DataTable dt = new DataTable("myTable");
DataColumn dc1 = new DataColumn("id", typeof(int));
dc1.AutoIncrement = true;
dc1.AutoIncrementSeed = 1;
dc1.AutoIncrementStep = 1;
dt.Columns.Add(dc1);
DataColumn dc2 = new DataColumn("name", typeof(string));
dc2.Caption = "姓名";
dc2.Unique = true;
dt.Columns.Add(dc2);
DataRow dr1 = dt.NewRow();
dr1["name"] = "frank";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["name"] = "jack";
dt.Rows.Add(dr2);
//列“name”被约束为是唯一的。值“jack”已存在。
//DataRow dr3 = dt.NewRow();
//dr3["name"] = "jack";
//dt.Rows.Add(dr3);
for (int i = 0; i < dt.Rows.Count; i++)
{
WriteLine($"id:{dt.Rows[i]["id"]}, name:{dt.Rows[i]["name"]}");
}
ADO.NET 六(DataRow DataColumn)的更多相关文章
- DataTable DataRow DataColumn DataSet
1.DataTable 数据表(内存) 2.DataRow DataTable 的行 3.DataColumn DataTable 的列 4.DataSet 内存中的缓存
- 基于三层架构项目下的Ado【六】
一.基于三层架构项目下的Ado增删改查总结,提示:现在一般都是使用EF框架操作. 1. 先在model层创建出一个和你将会查询出一样类型的表,比如你将查询出的有五个字段,那么你就需要创建出一个和你查询 ...
- (转 飛雲若雪)ADO.NET
一.简单介绍ADO.NET System.Data:DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint System.Data.C ...
- ADO.NET 总结
一.简单介绍ADO.NET System.Data:DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint System.Data.C ...
- ado.net介绍
System.Data:DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint System.Data.Common(各种数据访问类的 ...
- ADO.NET简介
一.ADO.NET ADO.NET源起ADO(ActiveX Data Objects),是一个COM组件库,在NET编程环境中优先使用的数据访问接口, 提供对诸如 SQL Server 和 XML ...
- .net基本面试题
OOP: Object Oriented Programming: 面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存.不可分割的整体——对象.对于相同类型的对象进行分 ...
- Asp.net Core的代码移植技巧,半天将SqlSugarORM转成Core
.net core中有哪些被抛弃的类 1.DataTable DataRow SqlDataAdapter DataRow DataColumn DataColumn 虽然这些类不是我ORM核心功能 ...
- .net程序员的学习计划
.net程序员的学习计划 与其说是计划,不如说是抄来的课程表.基于最近老大要求写一份一年的职业规划.我是一个向来没什么规划的人,不是职场规划,就连平时的规划都没有,基本上就是有什么任务就去完成.回想起 ...
随机推荐
- (二)Cisco dhcp snooping配置解释
#配置dhcp snooping相关命令 Switch(config)#ip dhcp snooping //打开DHCP Snooping功能Switch(config)#ip dhcp snoo ...
- 为什么集合类没有实现Cloneable和Serializable接口
为什么集合类没有实现Cloneable和Serializable接口? 答:克隆(cloning)或者序列化(serialization)的语义和含义是跟具体的实现相关的.因此应该由集合类的具体实现类 ...
- Scala函数柯里化(Currying or Curry)
柯里化(Currying) 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 简单的实现如下: scala> def ...
- javacpp, javacv: 封装了FFmpeg、OpenCV等计算机视觉编程人员常用库的接口
jvavacpp: 一个java调用jni的库,支持安卓. javacv: 封装了FFmpeg.OpenCV等计算机视觉编程人员常用库的接口,可以通过其中的Utility类方便的在包 ...
- [E2E_L8_1]segmentation_demo道路分割例子和GOMFCTemplate的初步融合
一.来源 模型例子自己带来副图像 二.简化 #include <algorithm> #include <fstream> #include <iomanip ...
- 如何在真实串口驱动还未加载的情况下调试uboot?
1. 先找出真实串口是什么型号 1.1 怎么找?笔者提供两种方案: 方案一: 若当前的板子支持dm,从uboot的dts找串口节点对应的compatible属性 方案二: 从linux内核的dts找串 ...
- odoo开发笔记--日期or时间字段给定默认值
开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields. ...
- MySQL count
https://www.jianshu.com/p/1b0a1f641e80] 不同引擎count(*)实现方式不同 MyISAM引擎把一个表的总行数记录在了磁盘上,执行count(*)会直接返回这个 ...
- [python语法]python中如何判断一个集合是另一个集合的子集?
问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...
- 伟程君解决端口被占用问题(接口jmeter 本地端口被占用完了,jmeter报错的问题)(亲测是可以的)
1.在目录下创建文件local.conf(没有就创建目录和文件) touch /etc/sysctl.d/local.conf mkdir(创建文件夹) touch(创建文件) 2.往local.co ...