C# 之 DataTable 详解

▪ 添加引用

using System.Data;

▪ 创建表

// 方法一:创建一个空表
DataTable dt = new DataTable();

// 方法二:创建一个名为"admin"的空表
DataTable dt = new DataTable("admin");

▪ 创建列

// 方法一:创建空列
DataColumn dc = new DataColumn();
dt.Columns.Add(dc);

// 方法二:创建带列名和类型名的列
dt.Columns.Add("password", typeof(String));
dt.Columns.Add("username", System.Type.GetType("System.String"));

// 方法三:通过 DataColumn 对象添加列
DataColumn dc = new DataColumn("update_time", typeof(DateTime));
dt.Columns.Add(dc);

DataColumn dc = new DataColumn("insert_time", System.Type.GetType("System.DateTime"));
dt.Columns.Add(dc);

▪ 创建行

// 初始化
DataTable dt = new DataTable();
dt.Columns.Add("insert_time", typeof(DateTime));
dt.Columns.Add("udpate_time", typeof(DateTime));

// 方法一:创建空行
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);

// 方法二:创建空行
dt.Rows.Add();

// 方法三:通过行框架创建并赋值
// Add 里面参数的数据顺序要和 dt 中的列的顺序对应 
dt.Rows.Add("insert_time", DateTime.Now);
dt.Rows.Add("update_time", DateTime.Now);

// 方法四:通过复制 dt2 表的某一行来创建
dt.Rows.Add(dt2.Rows[i].ItemArray);

▪ 赋值和取值

// 初始化
DataTable dt = new DataTable();

// 新建行的赋值
DataRow dr = dt.NewRow();
dr[0] = "admin";  // 通过索引赋值
dr["insert_time"] = DateTime.Now;  // 通过名称赋值

// 对表已有行进行赋值
dt.Rows[0][0] = "admin";  // 通过索引赋值
dt.Rows[0]["insert_time"] = DateTime.Now;  // 通过名称赋值

// 取值
string name = dt.Rows[0][0].ToString();
string time = dt.Rows[0]["insert_time"].ToString();

▪ 筛选行

// 初始化
DataTable dt = new DataTable();

...

// 选择 username 列值为空的行的集合
DataRow[] drs = dt.Select("username is null");

// 选择 username 列值为"李四"的行的集合
DataRow[] drs = dt.Select("username = '李四'");

// 筛选 username 列值中有"张"的行的集合(模糊查询)
DataRow[] drs = dt.Select("username like '张%'");

// 筛选 username 列值中有"张"的行的集合并按 admin_id 降序排序
DataRow[] drs = dt.Select("username like '张%'", "admin_id DESC");

▪ 删除行

// 初始化
DataTable dt = new DataTable();

...

// 使用 DataTable.Rows.Remove(DataRow) 方法
dt.Rows.Remove(dt.Rows[0]);

// 使用 DataTable.Rows.RemoveAt(index) 方法
dt.Rows.RemoveAt(0);

// 使用 DataRow.Delete() 方法
dt.Row[0].Delete();
dt.AcceptChanges();

// 如果要删除DataTable中的多行,应该采用倒序循环 DataTable.Rows
// 而且不能用 foreach 进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for( int i = dt.Rows.Count - 1; i >= 0; i-- ){
  dt.Rows.RemoveAt(i);
}

xx.Rows.Remove() 和 xx.Rows.RemoveAt() 方法是直接删除

xx.Row[0].Delete()方法只是将该行标记为 deleted,但是还存在,还可 DataTable.RejectChanges() 回滚,使该行取消删除。

用 xx.Rows.Count 来获取行数时,还是删除之前的行数,需要使用 DataTable.AcceptChanges() 方法来提交修改。

▪ 复制表

// 初始化
DataTable dt = new DataTable();

...

// 复制表
// 同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();

// 复制表
DataTable dtNew = dt.Copy();  // 复制 dt 表数据结构
dtNew.Clear();  // 清空数据

for( int i = 0; i < dt.Rows.Count; i++ ){
    if( ... ){
        dtNew.Rows.Add(dt.Rows[i].ItemArray);  // 添加数据行
    }
}

// 克隆表
// 只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();

// 如果只需要某个表中的某一行
DataTable dtNew = new DataTable();
dtNew = dt.Copy();

dtNew.Rows.Clear();  // 清空表数据
dtNew.ImportRow(dt.Rows[0]);  // 这是加入的是第一行

▪ 表排序

DataTable dt = new DataTable();  // 创建表

dt.Columns.Add("id", typeof(Int32));  // 添加列
dt.Columns.Add("age", typeof(Int32));
dt.Columns.Add("name", typeof(String));

dt.Rows.Add(new object[]{1, 20, "张三"});  // 添加行
dt.Rows.Add(new object[]{2, 25, "李四"});
dt.Rows.Add(new object[]{3, 30, "王五"});

DataView dv = dt.DefaultView;  // 获取表视图
dv.Sort = "id DESC";  // 按照ID倒序排序
dv.ToTable();  // 转为表
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值