DataTable总结(C#)

新建新表并赋值

新建新表
DataTable dt = new DataTable();   //创建一个空表
DataTable dt = new DataTable("doctor");   //创建一个名为"doctor"的空表
赋值

为空表添加三列

dtNew.Columns.Add("A", Type.GetType("System.String"));  //添加第一列,列名为A
dtNew.Columns.Add("B", Type.GetType("System.String"));  //添加第二列,列名为B
dtNew.Columns.Add("C", Type.GetType("System.String"));  //添加第三列,列名为C

为创建好的空表动态添加行,每行都有三列

int n = 3;
for (int i = 0; i < n; i++)
{
    DataRow dr = dt.NewRow();        //新建行
    dr[0] = (i + 0).ToString();      //第一列赋值
    dr[1] = (i + 1).ToString();      //第二列赋值
    dr[2] = (i + 2).ToString();      //第三列赋值
    dt.Rows.Add(dr);                 //向表中添加行
}
通过名称赋值

DataRow dr = dt.NewRow();  //新建行
dr[0] = "张三";            //通过索引赋值
dr["A"] = "张三"           //通过名称赋值

dt.Rows[0][0] = "张三";     //通过索引赋值
dt.Rows[0]["A"] = "张三";   //通过名称赋值
MySqlDataReader转换DataTable

下面是我的代码示例

DataTable dt_doctor = new DataTable();     //新建空表
string sql = "select * from doctor;";      //查询语句
MySqlDataReader reader = Goal_Mysql_var.mysql.exec_mysql_command_execute_Reader(sql); //这是我代码里自己写的
dt_doctor.Load(reader);                    //将MySqlDataReader转换为DataTable
reader.Close();                            //关闭reader
插入一行数据
DataTable dtNewr = new DataTable();
dtNew.ImportRow(dt.Rows[0]);//这是加入dt中的第一行数据

删除

使用DataTable.Rows.Remove(DataRow)方法

dt.Rows.Remove(dt.Rows[0]);   //使用DataTable.Rows.Remove(DataRow)方法,删除第0行
dt.AcceptChanges();

使用DataTable.Rows.RemoveAt(index)方法

dt.Rows.RemoveAt(0);    //使用DataTable.Rows.RemoveAt(index)方法,删除第0行
dt.AcceptChanges();

使用DataRow.Delete()方法

dt.Row[0].Delete();     //使用DataRow.Delete()方法,删除地0行
dt.AcceptChanges();

区别和联系

  • Remove()和RemoveAt()方法是直接删除
  • Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。
  • 用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。
  • 如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。

取值

string name = dt.Rows[0][0].ToString();      //通过索引取值
string name1 = dt.Rows[0]["A"].ToString();   //通过列名取值

复制

复制表,同时复制了表结构和表中的数据

DataTable dtNew = new DataTable();
dtNew = dt.Copy();  
dtNew.Clear()  //清空数据

克隆表,只是复制了表结构,不包括数据

DataTable dtNew = new DataTable();
dtNew = dt.Clone();

排序

DataView dv = dt.DefaultView;   //获取表视图
dv.Sort = "ID DESC";            //按照ID倒序排序
dv.ToTable();                   //转为表

筛选行

DataRow[] drs = dt.Select("A is null");  //选择A列值为空的行的集合
DataRow[] drs = dt.Select("A = '李四'");  //选择A列值为"李四"的行的集合
DataRow[] drs = dt.Select("A like '张%'");//筛选A列值中有"张"的行的集合(模糊查询),如果的多条件筛选,可以加 and 或 or
DataRow[] drs = dt.Select("A like '张%'", "B DESC"); //筛选A列值中有"张"的行的集合并按B降序排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值