新建新表并赋值
新建新表
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降序排序